当前位置:   article > 正文

【数据结构.C】顺序表和单链表的增删查改_定义一个存储整数的顺序表和单链表,增删改查

定义一个存储整数的顺序表和单链表,增删改查

宝子,你不点个赞吗?不评个论吗?不收个藏吗?

最后的最后,关注我,关注我,关注我,你会看到更多有趣的博客哦!!!

喵喵喵,你对我真的很重要。

目录

单链表增删查改

c1.h

sqlist.c

number.c

单链表的增删查改

 c1.h

stuscore.c


顺序表增删查改

c1.h

  1. #ifndef _C1_H_
  2. #define _C1_H_
  3. #include<string.h>
  4. #include<stdio.h> /* EOF(=^Z或F6),NULL */
  5. #include<stdlib.h> /* malloc()等 */
  6. #include<math.h> /* floor(),ceil(),abs() */
  7. /* 函数结果状态代码 */
  8. #define TRUE 1
  9. #define FALSE 0
  10. #define OK 1
  11. #define ERROR 0
  12. #define INFEASIBLE -1
  13. /* #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行 */
  14. typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
  15. typedef int Boolean; /* Boolean是布尔类型,其值是TRUEFALSE */
  16. #endif

sqlist.c

  1. #include"c1.h"
  2. #define MAXSIZE 100
  3. typedef int ElemType;
  4. typedef struct{
  5. ElemType *elem;
  6. int length;
  7. }SqList;
  8. Status InitList_Sq(SqList *L);
  9. int GetElem(SqList L,int i,ElemType *e);
  10. int LocateElem(SqList L,ElemType e);
  11. Status ListInsert_Sq(SqList *L,int i ,ElemType e);
  12. Status ListDelete_Sq(SqList *L,int i);
  13. void DestroyList(SqList *L);
  14. void ClearList(SqList *L);
  15. int GetLength(SqList L);
  16. int IsEmpty(SqList L);
  17. Status InitList_Sq(SqList *L)
  18. {
  19. L->elem=(ElemType *)malloc(sizeof(ElemType)* MAXSIZE);
  20. if(L->elem==NULL)
  21. exit(OVERFLOW);
  22. L->length=0;
  23. return OK;
  24. }
  25. int GetElem(SqList L,int i,ElemType *e)
  26. {
  27. if (i<1||i>L.length)
  28. return ERROR;
  29. *e=L.elem[i-1];
  30. return OK;
  31. }
  32. int LocateElem(SqList L,ElemType e)
  33. {
  34. int i;
  35. for (i=0;i<=L.length-1;i++)
  36. if (L.elem[i]==e)
  37. return i+1;
  38. return 0;
  39. }
  40. Status ListInsert_Sq(SqList *L,int i ,ElemType e)
  41. {
  42. int j;
  43. if(i<1 || i>L->length+1)
  44. return ERROR;
  45. if(L->length==MAXSIZE)
  46. return ERROR;
  47. for( j=L->length-1;j>=i-1;j-- )
  48. L->elem[j+1]=L->elem[j];
  49. L->elem[i-1]=e;
  50. ++L->length;
  51. return OK;
  52. }
  53. Status ListDelete_Sq(SqList *L,int i)
  54. {
  55. int j;
  56. if(i<1||i>L->length)
  57. return ERROR;
  58. for (j=i;j<=L->length-1;j++)
  59. L->elem[j-1]=L->elem[j];
  60. L->length--;
  61. return OK;
  62. }
  63. void DestroyList(SqList *L)
  64. {
  65. if (L->elem)
  66. free(L->elem);
  67. }
  68. void ClearList(SqList *L)
  69. {
  70. L->length=0;
  71. }
  72. int GetLength(SqList L)
  73. {
  74. return L.length;
  75. }
  76. int IsEmpty(SqList L)
  77. {
  78. if (L.length==0)
  79. return OK;
  80. else
  81. return ERROR;
  82. }

number.c

  1. #include"sqlist.c"
  2. void menu();
  3. void PrintList(SqList L);
  4. void DeleteAll(SqList* L,ElemType e);
  5. void menu()
  6. {
  7. printf("**顺序表功能选择界面**\n");
  8. printf("1.初始化顺序表\n");
  9. printf("2.插入\n");
  10. printf("3.批量输入\n");
  11. printf("4.输出\n");
  12. printf("5.删除第i个元素\n");
  13. printf("6.删除与值e相等的所有元素\n");
  14. printf("0.退出\n");
  15. }
  16. void PrintList(SqList L)
  17. {
  18. int i;
  19. if(L.length==0)
  20. {
  21. printf("当前顺序表为空表!\n");
  22. }
  23. else
  24. {
  25. printf("顺序表的当前元素:");
  26. for(i=1;i<=L.length;i++)
  27. {
  28. printf("%d ",L.elem[i-1]);
  29. }
  30. printf("\n");
  31. }
  32. }
  33. void DeleteAll(SqList *L,ElemType e)
  34. {
  35. int i,x,L_len;
  36. L_len=GetLength(*L);
  37. for(i=1;i<=L_len;i++)
  38. {
  39. x=LocateElem(*L,e);
  40. if(x!=0)
  41. ListDelete_Sq(L,x);
  42. else
  43. break;
  44. }
  45. }
  46. int main()
  47. {
  48. SqList L;
  49. ElemType e;
  50. int choose,temp,i,n;
  51. menu();
  52. while(1)
  53. {
  54. printf("\n请选择功能:");
  55. scanf("%d",&choose);
  56. switch(choose)
  57. {
  58. case 1:
  59. temp=InitList_Sq(&L);
  60. if(temp==OK)
  61. {
  62. printf("顺序表初始化成功!\n");
  63. printf("顺序表空间的起始化为:%x\n",L.elem);
  64. printf("顺序表的当前长度为:%d\n",L.length);
  65. printf("顺序表的当前最大容量为:%d\n",MAXSIZE);
  66. }
  67. else
  68. {
  69. printf("顺序表初始化失败!");
  70. return 0;
  71. }
  72. break;
  73. case 2:
  74. printf("请输入要插入的元素位置:");
  75. scanf("%d",&i);
  76. printf("请输入要插入元素的值:");
  77. scanf("%d",&e);
  78. temp=ListInsert_Sq(&L,i,e);
  79. if(temp==OK)
  80. {
  81. printf("插入元素成功!\n");
  82. PrintList(L);
  83. }
  84. else
  85. printf("插入失败!\n");
  86. break;
  87. case 3:
  88. printf("请输入要插入元素的个数:");
  89. scanf("%d",&n);
  90. printf("请输入要插入的元素(用空格分隔):");
  91. for(i=1;i<=n;i++)
  92. {
  93. scanf("%d",&e);
  94. temp=ListInsert_Sq(&L,L.length+1,e);
  95. if(temp==ERROR)
  96. {
  97. printf("插入第%d个元素失败!\n",i);
  98. break;
  99. }
  100. }
  101. if(i>n)
  102. printf("请输入元素成功!\n");
  103. PrintList(L);
  104. break;
  105. case 4:
  106. PrintList(L);
  107. break;
  108. break;
  109. case 5:
  110. printf("请输入要删除的元素位置:");
  111. scanf("%d",&i);
  112. ListDelete_Sq(&L,i);
  113. if(temp==ERROR)
  114. printf("删除失败!\n");
  115. else
  116. {
  117. printf("删除成功!\n");
  118. PrintList(L);
  119. }
  120. break;
  121. case 6:
  122. printf("请输入要删除的值:");
  123. scanf("%d",&e);
  124. DeleteAll(&L,e);
  125. PrintList(L);
  126. break;
  127. case 0:
  128. printf("退出系统\n");
  129. return 0;
  130. default:
  131. printf("输入错误,请重新输入!\n");
  132. break;
  133. }
  134. }
  135. return 0;
  136. }


单链表的增删查改

 c1.h

  1. #ifndef _C1_H_
  2. #define _C1_H_
  3. #include<string.h>
  4. #include<stdio.h> /* EOF(=^Z或F6),NULL */
  5. #include<stdlib.h> /* malloc()等 */
  6. #include<math.h> /* floor(),ceil(),abs() */
  7. /* 函数结果状态代码 */
  8. #define TRUE 1
  9. #define FALSE 0
  10. #define OK 1
  11. #define ERROR 0
  12. #define INFEASIBLE -1
  13. /* #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行 */
  14. typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
  15. typedef int Boolean; /* Boolean是布尔类型,其值是TRUEFALSE */
  16. #endif

stuscore.c

  1. #include"c1.h"
  2. typedef struct student
  3. {
  4. char num[6];
  5. char name[20];
  6. int score1,score2,score3;
  7. struct student *next;
  8. }LNode,*LinkList;
  9. void menu();
  10. void CreateList_L(LinkList *L,int n);
  11. void Print_L(LinkList L);
  12. int ListInsert_L(LinkList *L,int i,LNode e);
  13. int ListDelete_L(LinkList *L,int i);
  14. void Print_L(LinkList L);
  15. void help();
  16. //查询学生信息函数
  17. //修改学生信息
  18. //保存学生信息
  19. void help()//辅助系统
  20. {
  21. printf("\n0.欢迎使用系统帮助!\n");
  22. printf("\n1.初次进入系统后,请先选择学生成绩单链表的创建;\n");
  23. printf("\n2.按照菜单提示键入数字代号;\n");
  24. printf("\n3.增加学生信息后,请输出学生信息,查验;\n");
  25. printf("\n4.谢谢您的使用!\n");
  26. printf("\n");
  27. }
  28. void menu()
  29. {
  30. printf("****学生成绩管理系统****\n");
  31. printf("1.学生成绩单链表的创建\n");
  32. printf("2.插入学生信息\n");
  33. printf("3.删除学生信息\n");
  34. printf("4.输出学生信息\n");
  35. printf("0.退出");
  36. }
  37. void CreateList_L(LinkList *L,int n)
  38. {
  39. LinkList r,p;
  40. int i;
  41. (*L)=(LinkList)malloc(sizeof(LNode));
  42. r=(*L);
  43. for(i=1;i<=n;i++)
  44. {
  45. p=(LinkList)malloc(sizeof(LNode));
  46. printf("请输入第%d位学生的学号 姓名 成绩(用空格分隔我):",i);
  47. scanf("%s %s %d %d %d",p->num,p->name,&p->score1,&p->score2,&p->score3);
  48. p->next=NULL;
  49. r->next=p;
  50. r=p;
  51. }
  52. }
  53. void Print_L(LinkList L)
  54. {
  55. LinkList p;
  56. int i;
  57. p=L->next;
  58. if(!p)
  59. printf("该学生成绩表为空表!\n");
  60. else
  61. {
  62. printf("所有学生信息:\n");
  63. printf("学号\t姓名\t数据结构成绩\t高等数学成绩\t大学英语成绩\n");
  64. while(p)
  65. {
  66. printf("%s\t%s\t %d\t %d\t %d\n",p->num,p->name,p->score1,p->score2,p->score3);
  67. p=p->next;
  68. }
  69. }
  70. }
  71. int ListInsert_L(LinkList *L,int i,LNode e)
  72. {
  73. LinkList p,s;
  74. int j;
  75. p=(*L);
  76. j=0;
  77. while(p&&j<i-1)
  78. {
  79. p=p->next;
  80. j++;
  81. }
  82. if(!p||j>i-1)
  83. return ERROR;
  84. s=(LinkList)malloc(sizeof(LNode));
  85. *s=e;
  86. s->next=p->next;
  87. p->next=s;
  88. return OK;
  89. }
  90. int ListDelete_L(LinkList *L,int i)
  91. {
  92. LinkList p,q;
  93. int j;
  94. p=(*L);
  95. j=0;
  96. while(p->next&&j<i-1)
  97. {
  98. p=p->next;
  99. j++;
  100. }
  101. if(!(p->next)||j>i-1)
  102. return ERROR;
  103. q=p->next;
  104. p->next=q->next;
  105. free(q);
  106. return OK;
  107. }
  108. int main()
  109. {
  110. LinkList L;
  111. int choose,n,i,temp;
  112. LNode e;
  113. char snum[20];
  114. help();
  115. while(1)
  116. {
  117. menu();
  118. printf("\n请选择功能:");
  119. scanf("%d",&choose);
  120. switch(choose)
  121. {
  122. case 1:
  123. printf("学生成绩单链表的创建\n");
  124. printf("\n请选择功能:");
  125. scanf("%d",&n);
  126. CreateList_L(&L,n);
  127. Print_L(L);
  128. break;
  129. case 2:
  130. printf("请插入学生信息\n");
  131. scanf("%d",&i);
  132. printf("请输入要插入学生的学号 姓名 数据结构成绩\t高等数学成绩\t大学英语成绩(用空格分隔):");
  133. scanf("%s %s %d %d %d",e.num,e.name,e.score1,e.score2,e.score3);
  134. temp=ListInsert_L(&L,i,e);
  135. if(temp==OK)
  136. {
  137. printf("插入成功!\n");
  138. printf("\n请选择功能:");
  139. Print_L(L);
  140. }
  141. else
  142. printf("插入失败!\n");
  143. break;
  144. case 3:
  145. printf("删除学生信息\n");
  146. printf("请输入要删除元素的位置");
  147. scanf("%d",&i);
  148. temp=ListDelete_L(&L,i);
  149. if(temp==OK)
  150. {
  151. printf("删除成功!\n");
  152. printf("\n请选择功能:");
  153. Print_L(L);
  154. }
  155. else
  156. printf("删除失败!\n");
  157. break;
  158. case 4:
  159. printf("输出学生信息\n");
  160. printf("\n请选择功能:");
  161. Print_L(L);
  162. break;
  163. case 0:
  164. printf("退出系统!\n");
  165. return 0;
  166. default:
  167. printf("输入错误,请重新输入!\n");
  168. break;
  169. }
  170. }
  171. return 0;
  172. }

 


宝子,你不点个赞吗?不评个论吗?不收个藏吗?

最后的最后,关注我,关注我,关注我,你会看到更多有趣的博客哦!!!

喵喵喵,你对我真的很重要。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/422402
推荐阅读
相关标签
  

闽ICP备14008679号