加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

【C++】建立一个学生信息链表,每个结点包括:学号、姓名、成绩。【原创技术】

(2012-05-23 21:37:08)
标签:

c

链表

it

分类: C加加开发
题目:

建立一个学生信息链表,每个结点包括:学号、姓名、成绩。实现链表的建立、显示和查询。查询是指输入一个学号,如果链表中存在该学号的的结点,则显示此结点的数据。



源代码:

  1. //科目:C++实验3
  2. //题目:建立一个学生信息链表,每个结点包括:学号、姓名、成绩。
  3. //语言:C++
  4. //作者:武叶
  5. //创作时间:2012年3月20日
  6. #include <iostream>
  7. using namespace std;

  8. static int N=0; //定义N记录学生人数



  9. typedef struct Node
  10. {
  11. int num;
  12. char name[10];
  13. float score;
  14. struct Node *next;
  15. }stNode;



  16. stNode * initlist()
  17. {
  18. struct Node *head; //定义头指针
  19. struct Node *p1,*p2;
  20. p1=p2=new Node; //使p1,p2指向新的结点
  21. cout<<"请按学号姓名成绩依次输入:"<<"\n";
  22. cin>>p1->num;cin>>p1->name;cin>>p1->score;
  23. head=NULL;
  24. while(p1->num!=0)
  25. { //输入学号以0结束
  26. N++; //学生记录加1
  27. if(N==1)
  28. head=p1;
  29. else
  30. p2->next=p1;
  31. p2=p1; //使p1指向结点尾
  32. p1=new Node; //申请新的结点,存放下个记录
  33. cin>>p1->num; cin>>p1->name;cin>>p1->score;
  34. }
  35. p2->next=NULL;
  36. return(head); //返回头指针
  37. }



  38. void dispStLink(struct Node *head)
  39. {
  40. struct Node *p;
  41. p=head;
  42. cout<<"学号"<<"\t"<<"姓名"<<"\t"<<"成绩"<<"\n";
  43. for(int i=0;i<=20;i++)
  44. {
  45. cout<<p->num<<"\t"<<p->name<<"\t"<<p->score<<"\t"<<"\n"; p=p->next;
  46. }
  47. }



  48. stNode *search(struct Node *head,int number)
  49. {
  50. int k=0,j=N;
  51. struct Node *p3;
  52. p3=head;
  53. while(j!=0){
  54. if(p3->num==number)
  55. {
  56. cout<<"学号"<<"\t"<<"姓名"<<"\t"<<"成绩"<<"\n"<<endl;
  57. cout<<p3->num<<"\t"<<p3->name<<"\t"<<p3->score<<"\t"<<"\n";
  58. }
  59. else
  60. p3=p3->next;
  61. k++; //k记录链表中不等于查找学号的个数
  62. j--;
  63. }
  64. if(k==N) {cout<<"对不起,没有该学号的信息"<<"\n"<<"\n";}
  65. return 0;
  66. }



  67. stNode * del(struct Node *head)
  68. {
  69. int num2,k=N;
  70. struct Node *p4,*p5;
  71. cout<<"请输入删除学生信息的学生学号:num=";cin>>num2;
  72. p4=head;
  73. while(num2!=p4->num&&p4->next!=NULL)
  74. { //没有删除结点的信息且指针不在结尾
  75. p5=p4;
  76. p4=p4->next;
  77. } //指针后移
  78. if(num2==p4->num)
  79. {
  80. if(p4==head)
  81. head=p4->next;
  82. else
  83. p5->next=p4->next;
  84. cout<<"删除的学生信息为:"<<"\n";
  85. cout<<"学号"<<"\t"<<"姓名"<<"\t"<<"\t"<<"成绩"<<"\n"<<endl;
  86. cout<<p4->num<<"\t"<<p4->name<<"\t"<<p4->score<<"\t"<<"\n";
  87. cout<<"删除成功"<<"\n";
  88. N=N-1; //使总纪录数减1
  89. }

  90. else
  91. {
  92. cout<<"无此学生的结点"<<"\n";
  93. }
  94. return(head);
  95. }



  96. int createStLink(struct Node *head,struct Node *stu)
  97. {
  98. struct Node *p6,*p7,*p8;
  99. p7=head;
  100. p6=stu;
  101. if(head==NULL)
  102. {
  103. head=p6;p6->next=NULL;
  104. }
  105. else
  106. { //如果链表为空则在头结点创建信息
  107. while(p6->num > p7->num && p7->next!=NULL)
  108. {
  109. p8=p7;
  110. p7=p7->next;
  111. }
  112. if(p6->num<=p7->num)
  113. {
  114. if(head==p7)
  115. head=p6;
  116. else
  117. p8->next=p6;
  118. p6->next=p7;
  119. }
  120. else
  121. {
  122. p7->next=p6;p6->next=NULL;
  123. }
  124. }

  125. N++;
  126. return 1;
  127. }
  128. int main()
  129. {
  130. struct Node *H,*stud;
  131. char M;
  132. int num1;
  133. H=initlist();



  134. while(M!='5')
  135. {
  136. if(H==NULL)
  137. return 0;
  138. else
  139. {
  140. cout<<"*********************************"<<"\n";
  141. cout<<"1、创建结点信息"<<"\n"<<"2、查找结点信息"<<"\n"
  142. <<"3、显示结点信息"<<"\n"<<"4、删除结点信息\n"<<"5、退出程序"<<"\n";
  143. cout<<"*********************************"<<"\n";
  144. cin>>M;
  145. switch(M)
  146. {
  147. case '1':
  148. cout<<"请按学号姓名成绩依次输入:"<<"\n";
  149. case '2':
  150. cout<<"请输入要查找结点信息的学号:"<<"num=";
  151. cin>>num1;
  152. search(H,num1);
  153. break;
  154. case '3':
  155. cout<<"所有学生信息如下:\n";
  156. dispStLink(H);
  157. break;
  158. case '4':
  159. H=del(H);
  160. if(H==NULL)
  161. cout<<"链表中没有学生结点信息了"<<"\n";
  162. break;
  163. stud=new Node;
  164. cin>>stud->num;
  165. cin>>stud->name;
  166. cin>>stud->score;
  167. createStLink(H,stud);
  168. dispStLink(H);
  169. break;
  170. }
  171. }
  172. }
  173. cout<<"退出成功!"<<"\n";
  174. return 0;
  175. }

 

更多详细内容::::去学习

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有