当前位置:   article > 正文

数据结构 顺序表实现手机通讯录_用线性表设计手机通讯录

用线性表设计手机通讯录

代码

  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <windows.h>
  6. #include <conio.h>
  7. //#include <stack>
  8. typedef struct {
  9. char name[10];
  10. char ptel[13];//联系号码
  11. char qq[11];
  12. char wtel[13];//办公号码
  13. }ElemType;
  14. typedef struct {
  15. ElemType date[50];
  16. int length;
  17. }SqList;
  18. //初始化线性表
  19. void InitList(SqList *&L){
  20. L=(SqList *)malloc(sizeof(SqList)); //为线性表分别配空间
  21. L->length=0;
  22. }
  23. //输出线性表
  24. void DispList(SqList *L){
  25. int i;
  26. printf(" NO MAME PTEL QQ WTEL\n");
  27. for(i=0;i<L->length;i++){
  28. printf(" %2d%12s%18s%17s%18s\n",i+1,L->date[i].name,L->date[i].ptel,L->date[i].qq,L->date[i].wtel);
  29. fflush(stdin);//清空输入缓冲区
  30. }
  31. printf("\n");
  32. }
  33. //插入数据元素
  34. bool ListInsert(SqList *&L,int i,ElemType e){ //boolean
  35. int j;
  36. if(e.name=="\0"||i<1||i>L->length+1){
  37. printf("插入失败!\n\n");
  38. return false;
  39. }
  40. i--;//将逻辑序号转化为物理序号
  41. for(j=L->length;j>i;j--){
  42. L->date[j]=L->date[j-1]; //将元素后移
  43. }
  44. L->date[i]=e;
  45. L->length++;
  46. // printf("length=%d\n\n",L->length);
  47. return true;
  48. }
  49. //删除数据元素
  50. bool ListDelete(SqList *&L,int i,ElemType &e){
  51. int j;
  52. if(i<1||i>L->length+1){
  53. printf("删除失败!\n\n");
  54. return false;
  55. }
  56. i--;//将逻辑序号转化为物理序号
  57. e=L->date[i];
  58. for(j=i;j<L->length;j++){
  59. L->date[j]=L->date[j+1]; //将元素前移
  60. }
  61. L->length--;
  62. printf("删除成功!\n\n");
  63. // printf("length=%d\n\n",L->length);
  64. return true;
  65. }
  66. //查询联系人
  67. int LocateElem(SqList *L,ElemType e){
  68. int i=0;
  69. while(i<L->length&&strcmp(L->date[i].name,e.name)!=0) //strcmp() 比较字符串 ,相等返回0
  70. i++;
  71. if(i>L->length){
  72. return 0;
  73. }
  74. else{
  75. // puts(L->date[i].name);//puts() 向栈顶添加元素(线性表后面)
  76. // puts(L->date[i].ptel);
  77. // puts(L->date[i].qq);
  78. // puts(L->date[i].wtel);
  79. printf("name:%s ptel:%s qq:%s wtel:%s\n\n",L->date[i].name,L->date[i].ptel,L->date[i].qq,L->date[i].wtel);
  80. return(i+1);
  81. }
  82. }
  83. //输出联系人数
  84. void CountList(SqList *L){
  85. printf("目前联系人总数:%d\n\n",L->length);
  86. }
  87. //摧毁线性表
  88. void DestroyList(SqList *L)
  89. {
  90. free(L->date); //使用free函数,释放空间
  91. L->length = 0;
  92. printf("销毁成功!\n\n");
  93. }
  94. void menu1(){ //打印菜单
  95. printf(" -----------------------------\n");
  96. printf(" 手机通讯录的应用\n");
  97. printf(" -----------------------------\n");
  98. printf(" 1.初始化通讯录\n");
  99. printf(" 2.增加联系人信息\n");
  100. printf(" 3.显示联系人信息\n");
  101. printf(" 4.删除联系人信息\n");
  102. printf(" 5.查找联系人信息\n");
  103. printf(" 6.退出\n");
  104. printf(" 扩展功能:\n");
  105. printf(" 7.查询当前联系人人数\n");
  106. printf(" 8.销毁通讯录\n");
  107. printf(" -----------------------------\n");
  108. }
  109. int main(){
  110. SqList *L;
  111. int flag=1;
  112. int i,j;
  113. ElemType s[4]={ "林一","13845467326","123234675","15278538464",
  114. "林二","12547722234","243624213","12734532894",
  115. "林三","13254678924","317643927","13423137876",
  116. "林四","14219834567","244292934","17683273484"};
  117. ElemType e;
  118. InitList(L);
  119. menu1();
  120. for(int i=0;i<4;i++){
  121. ListInsert(L,i+1,s[i]);
  122. }
  123. DispList(L);
  124. while(flag){
  125. printf("请选择:");
  126. scanf("%d",&j);
  127. switch(j){
  128. case 1:
  129. InitList(L);
  130. printf("初始化成功!\n\n");
  131. break;
  132. case 2:
  133. printf("请以次输入联系人信息:");
  134. scanf("%s %s %s %s",e.name,e.ptel,e.qq,e.wtel);
  135. printf("请输入插入的位置:");
  136. scanf("%d",&i);
  137. fflush(stdin);//清空输入缓冲区,确保不影响后面的数据读取
  138. if(ListInsert(L,i,e)){
  139. printf("插入成功!\n\n");
  140. }
  141. break;
  142. case 3:
  143. DispList(L);
  144. break;
  145. case 4:
  146. printf("请输入删除的联系人位置:");
  147. scanf("%d",&i);
  148. ListDelete(L,i,e);
  149. break;
  150. case 5:
  151. printf("请输入查询的联系人姓名:");
  152. scanf("%s",&e.name);
  153. LocateElem(L,e);
  154. break;
  155. case 6:
  156. flag=0;
  157. printf("退出成功!\n\n");
  158. break;
  159. case 7:
  160. CountList(L);
  161. break;
  162. case 8:
  163. DestroyList(L);
  164. break;
  165. default:
  166. printf("输入有误!\n\n");
  167. break;
  168. }
  169. }
  170. return 0;
  171. }

运行结果

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

闽ICP备14008679号