鱼C论坛

 找回密码
 立即注册
查看: 1856|回复: 1

[已解决]关于链表的问题

[复制链接]
发表于 2022-6-25 17:25:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
就是第一部插入元素的时候就出问题了,只能插两个元素,我想要插三个。然后他不让输了以后也不会进行接下来的操作,就直接跳出这个程序了,这要怎么解决啊

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAXSIZE 10000
  4. #define N 3
  5. typedef struct
  6. {
  7.     char No[40];   //书的编号
  8.     char name[50]; //书的名字
  9.     float price;   //书的价格
  10. } Book;
  11. typedef struct
  12. {
  13.     Book *elem;
  14.     int lenght;
  15. } SqList;

  16. void InitList(SqList &L);
  17. void GetElem(SqList L, int i, Book &e);
  18. int LocateElem(SqList L, Book e);
  19. void ListInsert(SqList &L, int i, Book e);
  20. void ListDelete(SqList &L, int i);

  21. int main()
  22. {
  23.     SqList p1;
  24.     Book e[N];
  25.     Book e1, e2;
  26.     int p;
  27.     InitList(p1);
  28.     printf("向顺序表加入%d个元素:\n书的编号 书的价格 书的名字\n", N);
  29.     //添加顺序表的元素
  30.     for (int i = 0; i < N; i++)
  31.     {
  32.         scanf("%s%f%s", e[i].No, &e[i].price, e[i].name);
  33.         ListInsert(p1, i + 1, e[i]);
  34.     }
  35.     //输出一次;
  36.     for (int i = 0; i < N; i++)
  37.         printf("%s :%s\n价格:%.2f\n", p1.elem[i].No, p1.elem[i].name, p1.elem[i].price);
  38.     printf("要查找第几书本?\n");
  39.     scanf("%d", &p);
  40.     GetElem(p1, p, e1);
  41.     printf("%s :%s\n价格:%.2f\n", e1.No, e1.name, e1.price);
  42.     scanf("%s %s %f", e2.No, e2.name, &e2.price);
  43.     printf("这本书是第%d本书\n", LocateElem(p1, e2));
  44.     scanf("%d", &p);
  45.     ListDelete(p1, p);
  46.     for (int i = 0; i < N - 1; i++)
  47.         printf("%s :%s\n价格:%.2f\n", p1.elem[i].No, p1.elem[i].name, p1.elem[i].price);
  48.     return 0;
  49. }
  50. //顺序表的初始化,构造一个空的顺序表
  51. void InitList(SqList &L)
  52. {
  53.     //为顺序表分配一个大小为MAXSIZE的数组空间
  54.     L.elem = new Book[MAXSIZE];
  55.     if (!L.elem)
  56.         exit(0);  //存储空间分配失败退出
  57.     L.lenght = 0; //空表长度为0
  58. }

  59. //顺序列表的取值,通过指定位置序号i
  60. void GetElem(SqList L, int i, Book &e)
  61. {
  62.     //判断定位的i是否为合理的。不合理就输出ERROR
  63.     //合理就输出通过e返回的第i个数据的传值
  64.     if (i < 1 || i > L.lenght)
  65.     {
  66.         printf("ERROR");
  67.     }
  68.     else
  69.     {
  70.         e = L.elem[i - 1];
  71.     }
  72. }

  73. //顺序表的查找
  74. int LocateElem(SqList L, Book e)
  75. {
  76.     for (int i = 0; i < L.lenght; i++)
  77.     {
  78.         if (L.elem[i].name == e.name && L.elem[i].No == e.No && L.elem[i].price == e.price)
  79.             return i + 1;
  80.     }
  81.     return 0;
  82. }

  83. //顺序表的插入
  84. void ListInsert(SqList &L, int i, Book e)
  85. {
  86.     if (i < 1 || i > L.lenght + 1)
  87.         printf("enter i was ERROR");
  88.     if (L.lenght == MAXSIZE)
  89.         printf("out of sequence table range");
  90.     for (int j = L.lenght - 1; j >= 0; j--)
  91.     {
  92.         if (i != j + 1)
  93.         {
  94.             L.elem[j + 1] = L.elem[j];
  95.             L.elem[j] = L.elem[j - 1];
  96.         }
  97.         else
  98.         {
  99.             L.elem[j] = e;
  100.             break;
  101.         }
  102.     }
  103.     L.lenght++;
  104. }

  105. //顺序表的删除
  106. void ListDelete(SqList &L, int i)
  107. {
  108.     if (i < 1 || i > L.lenght + 1)
  109.         printf("enter i was ERROR");
  110.     if (L.lenght == MAXSIZE)
  111.         printf("out of sequence table range");
  112.     for (int j = i - 1; j < L.lenght; j++)
  113.     {
  114.         L.elem[j] = L.elem[j + 1];
  115.     }
  116. }
复制代码
最佳答案
2022-6-25 17:31:29
  1. #define N 3
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-6-25 17:31:29 | 显示全部楼层    本楼为最佳答案   
  1. #define N 3
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-17 00:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表