灰与 2021-12-16 08:12 采纳率: 100%
浏览 78
已结题

我想实现数据的插入,删除和修改,求修改代码让他能成功运行

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct SPB
{
int seller_num;
int fit_num;
int building_num;
int count;
struct SPB* next;
}ListNode, * LinkList;
int main()
{
struct SPB* head = (struct SPB*)malloc(sizeof(struct SPB));
if (head == NULL)
{
printf("分配失败,程序结束");
exit(0);
}
head->next = NULL;
struct SPB* p = NULL;
int ch = 0;
while (ch != 5)
{
printf("\nMUNU\n");//菜单
printf("add data---------1\n");
printf("delete data------2\n");
printf("update data------3\n");
printf("print linklist---4\n");
printf("exit ------------5\n");
printf("***************\n\n");
printf("请输入你的选择:");
scanf("%d", &ch);
if (ch == 1)
{
struct SPB
pb; //struct SPB
pf, * pb;
int i;
if (head == NULL)
continue;
else {
p = head;
while (p->next) p = p->next;
}
for (i = 0; i < 2; i++)
{
pb = (struct SPB*)malloc(sizeof(struct SPB));
if (NULL == pb)
{
printf("malloc fail!\n");
break; //return head;
}
pb->next = NULL;
printf("\nseller's number: ");
scanf("%d", &pb->seller_num);
printf("fit's number: ");
scanf("%d", &pb->fit_num);
printf("builiding's number: ");
scanf("%d", &pb->building_num);
printf("count's number: ");
scanf("%d", &pb->count);
p->next = pb;
p = pb;
}
}
if (ch == 2)
{
int i, j = 0;
struct SPB
q = NULL;
if (head == NULL)
continue;
else {
p = head;
}
do {
printf("请输入需删除的项:");
scanf("%d", &i);
} while (i <= 0);
while (p && j < i)
{
q = p;
p = p->next;
j++;
}
if (p == NULL)
printf("\n未找到删除的项.\n");
else {
q->next = p->next;
free(p);
printf("\n第%d项删除成功.\n", i);
}
}
if (ch == 3)
{
int i, j = 0;
if (head == NULL)
continue;
else {
p = head;
}
do {
printf("请输入需修改的项:");
scanf("%d", &i);
} while (i <= 0);
while (p && j < i)
{
p = p->next;
j++;
}
if (p == NULL)
printf("\n未找到修改的项.\n");
else {
int sel;
do{
printf("\n请输入你要修改的数据 1,销售商号码 2,配件号 3,工地号 4,数量 :");
scanf("%d", &sel);
} while (sel < 1 || sel>4);
switch (sel) {
case 1:printf("请输入新的销售商品号:");
scanf("%d", &p->seller_num);
break;
case 2:printf("请输入新的配件号:");
scanf("%d", &p->fit_num);
break;
case 3:printf("请输入新的工地号:");
scanf("%d", &p->building_num);
break;
case 4:printf("请输入新的数量:");
scanf("%d", &p->count);
break;
default:break;
}
printf("\n第%d项数据修改成功.\n", i);
}
}
if (ch == 4)
{
if (head->next == NULL)
continue;
else {
p = head->next;
}
printf("\n1.销售商号码\t2.配件号\t3.工地号\t4.数量\n");
while (p)
{
printf("%d\t\t%d\t\t%d\t\t%d\n", p->seller_num, p->fit_num, p->building_num, p->count);
p = p->next;
}
}
}
return 0;
}

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2021-12-16 09:24
    关注

    修改如下,供参考:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    typedef struct SPB
    {
        int seller_num;
        int fit_num;
        int building_num;
        int count;
        struct SPB* next;
    }ListNode, * LinkList;
    int main()
    {
        struct SPB* head = (struct SPB*)malloc(sizeof(struct SPB));
        if (head == NULL)
        {
            printf("分配失败,程序结束");
            exit(0);
        }
        head->next = NULL;
        struct SPB* p = NULL;
        int ch = 0;
        while (ch != 6)
        {
            printf("\n*******MUNU*******\n");//菜单
            printf("add data---------1\n");  //增加 
            printf("delete data------2\n");  //删除 
            printf("update data------3\n");  //修改
            printf("insert data------4\n");  //插入
            printf("print linklist---5\n");  //输出 
            printf("exit ------------6\n");  //退出
            printf("******************\n\n");
            printf("请输入你的选择:");
            scanf("%d", &ch);
            if (ch == 1)
            {
                struct SPB* pb; //struct SPB* pf, * pb;
                int i;
                if (head == NULL) 
                    continue;
                else {
                    p = head;
                    while (p->next) p = p->next;
                }
                for (i = 0; i < 2; i++)
                {
                    pb = (struct SPB*)malloc(sizeof(struct SPB));
                    if (NULL == pb)
                    {
                        printf("malloc fail!\n");
                        break; //return head;
                    }
                    pb->next = NULL;
                    printf("\nseller's number: ");
                    scanf("%d", &pb->seller_num);
                    printf("fit's number: ");
                    scanf("%d", &pb->fit_num);
                    printf("builiding's number: ");
                    scanf("%d", &pb->building_num);
                    printf("count's number: ");
                    scanf("%d", &pb->count);
                    p->next = pb;
                    p = pb;
                }
            }
            if (ch == 2) 
            {
                int i, j = 0;
                struct SPB* q = NULL;
                if (head == NULL)
                    continue;
                else {
                    p = head;
                }
                do {
                    printf("请输入需删除的项:");
                    scanf("%d", &i); 
                } while (i <= 0);
                while (p && j < i)
                {
                    q = p;
                    p = p->next;
                    j++;
                }
                if (p == NULL)
                    printf("\n未找到删除的项.\n");
                else {
                    q->next = p->next;
                    free(p);
                    printf("\n第%d项删除成功.\n", i);
                }
            }
            if (ch == 3)
            {
                int i, j = 0;
                if (head == NULL)
                    continue;
                else {
                    p = head;
                }
                do {
                    printf("请输入需修改的项:");
                    scanf("%d", &i); 
                } while (i <= 0);
                while (p && j < i)
                {
                    p = p->next;
                    j++;
                }
                if (p == NULL)
                    printf("\n未找到修改的项.\n");
                else {
                    int sel;
                    do{
                        printf("\n请输入你要修改的数据 1,销售商号码 2,配件号 3,工地号 4,数量 :");
                        scanf("%d", &sel);
                    } while (sel < 1 || sel>4);
                    switch (sel) {
                    case 1:printf("请输入新的销售商品号:");
                           scanf("%d", &p->seller_num);
                           break;
                    case 2:printf("请输入新的配件号:");
                           scanf("%d", &p->fit_num);
                           break;
                    case 3:printf("请输入新的工地号:");
                           scanf("%d", &p->building_num);
                           break;
                    case 4:printf("请输入新的数量:");
                           scanf("%d", &p->count);
                           break;
                    default:break;
                    }
                    printf("\n第%d项数据修改成功.\n", i);
                }
            }
            if (ch == 4)
            {
                int i, j = 0;
                if (head == NULL)
                    continue;
                else {
                    p = head;
                }
                struct SPB* q = NULL, * ib = (struct SPB*)malloc(sizeof(struct SPB));
                ib->next = NULL;
                do {
                    printf("请输入插入的项序号(前插):");
                    scanf("%d", &i);
                } while (i <= 0);
                printf("\n请输入插入项的数据:\n");
                printf("\nseller's number: ");
                scanf("%d", &ib->seller_num);
                printf("fit's number: ");
                scanf("%d", &ib->fit_num);
                printf("builiding's number: ");
                scanf("%d", &ib->building_num);
                printf("count's number: ");
                scanf("%d", &ib->count);
                while (p && j < i)
                {
                    q = p;
                    p = p->next;
                    j++;
                }
                if (p == NULL)
                    q->next = ib;  
                else {
                    ib->next = q->next;
                    q->next  = ib;
                }
                printf("\n第%d项插入成功.\n", i);
            }
            if (ch == 5)
            {
                if (head->next == NULL)
                    continue;
                else {
                    p = head->next;
                }
                printf("\n1.销售商号码\t2.配件号\t3.工地号\t4.数量\n");
                while (p)
                {
                    printf("%d\t\t%d\t\t%d\t\t%d\n", p->seller_num, p->fit_num, p->building_num, p->count);
                    p = p->next;
                }
            }
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 12月24日
  • 已采纳回答 12月16日
  • 创建了问题 12月16日

悬赏问题

  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line