文件功能:实现了动态建立一个学生信息的链表包括链表的
创建、插入、删除、和打印输出学生信息包括姓名和分数

  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4.  
  5. //单个节点
  6. struct Node
  7. {
  8. //Data
  9. string name;
  10. double score;
  11.  
  12. //Pointer
  13. Node* next;
  14. };
  15.  
  16. typedef Node ListNode;
  17.  
  18. //创建链表
  19. ListNode* CreateList()
  20. {
  21. ListNode* head=new ListNode;//指向头结点指针
  22. ListNode*p, *pre;
  23. head->next = NULL;
  24. pre = head;
  25. cout << "Input name of the student:" << endl;
  26. string name;
  27. cin >> name;
  28. cout << "Input his score:" << endl;
  29. double score;
  30. cin >> score;
  31.  
  32. while (name!="q")
  33. {
  34. p = new ListNode;
  35. p->name=name;
  36. p->score=score;
  37. pre->next = p;
  38. pre = p;
  39. cout << "Input name of the student(q to quit input)" << endl;
  40. cin >> name;
  41. if (name != "q")
  42. {
  43. cout << "Input his score:" << endl;
  44. cin >> score;
  45. }
  46. }
  47. pre->next = NULL;
  48. return head;
  49. }
  50.  
  51. //输出链表
  52. void PrintList(ListNode *h)
  53. {
  54. ListNode*p;
  55. p = h->next;
  56. while (p)
  57. {
  58. cout << p->name << " " << p->score << endl;
  59. p = p->next;
  60. }
  61. }
  62.  
  63. //在位置i插入链表
  64. void InsertList(ListNode *L, int i, string name, double score)
  65. {
  66. ListNode *p, *q;
  67. p = L;
  68. int j = 0;
  69. while (p&&j < i - 1)
  70. {
  71. p = p->next;
  72. j++;
  73. }
  74. if (!p)return;
  75. q = new ListNode;
  76. q->name = name;
  77. q->score = score;
  78. q->next = p->next;
  79. p->next = q;
  80. }
  81.  
  82. //删除节点
  83. void Delete(ListNode*L, int i)
  84. {
  85. ListNode*p, *q;
  86. p = L;
  87. int j = 0;
  88. while (p&&j < i - 1)
  89. {
  90. p = p->next;
  91. j++;
  92. }
  93. if (!p)return;
  94. q = p->next;
  95. p->next = q->next;
  96. delete q;
  97. }
  98.  
  99. //按位搜索节点
  100. void Search(ListNode*L, int i)
  101. {
  102. ListNode*p=L;
  103. int j = 0;
  104. while (p&&j < i - 1)
  105. {
  106. p = p->next;
  107. j++;
  108. }
  109. if (!p)return;
  110. cout << "第" << i << "个学生" << ":";
  111. cout << p->next->name << " " << p->next->score << endl;
  112. }
  113.  
  114. //按名字搜索节点
  115. void Searchz(ListNode*L, string name)
  116. {
  117. ListNode*p;
  118. p = L;
  119. int j = 0;
  120. while (p && (p->next->name) != name)
  121. {
  122. p = p->next;
  123. j++;
  124. }
  125. if (!p)
  126. {
  127. cout << "Not Found" << endl;
  128. return;
  129. }
  130. else
  131. {
  132. cout << p->next->name << " " << p->next->score << endl;
  133. }
  134. }
  135.  
  136. //主函数
  137. int main()
  138. {
  139. ListNode*head;
  140. head = CreateList();
  141. string name1, name2;
  142. double score;
  143. int j, j1, j2;
  144.  
  145. cout << "1--输出链表" << endl;
  146. cout << "2--添加元素" << endl;
  147. cout << "3--删除元素" << endl;
  148. cout << "4--按位输出元素" << endl;
  149. cout << "5--按名字输出元素" << endl;
  150. cout << "0--退出" << endl;
  151. int i;
  152. cin >> i;
  153. while (i)
  154. {
  155. switch (i)
  156. {
  157. case 1:
  158. PrintList(head);
  159. break;
  160. case 2:
  161. cout << "请输入学生位置:";
  162. cin >> j;
  163. cout << "名字:";
  164. cin >> name1;
  165. cout << "成绩:";
  166. cin >> score;
  167. InsertList(head, i, name1, score);
  168. PrintList(head);
  169. break;
  170. case 3:
  171. cout << "输入要删除学生位置:";
  172. cin >> j1;
  173. Delete(head, j1);
  174. PrintList(head);
  175. break;
  176. case 4:
  177. cout << "请输入学生位置:";
  178. cin >> j2;
  179. Search(head, j2);
  180. break;
  181. case 5:
  182. cout << "请输入学生姓名:";
  183. cin >> name2;
  184. Searchz(head, name2);
  185. break;
  186. default: cout << "ERROR! Try again!" << endl;
  187. }
  188. cin >> i;
  189. }
  190. delete head;
  191.  
  192. return 0;
  193. }

  

Linked List 实例的更多相关文章

  1. 最近学习工作流 推荐一个activiti 的教程文档

    全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...

  2. Distributed1:Linked Server 添加和删除

    A linked server allows for access to distributed, heterogeneous queries against OLE DB data sources. ...

  3. 分享一个批量导出当前实例下的所有linkedserver脚本

    分享一个批量导出当前实例下的所有linkedserver脚本 很多时候,我们都需要导出实例下面的登录用户,job,linkedserver等等 导出job比较复杂,下午写了一个脚本把所有的linked ...

  4. Singleton、MultiThread、Lib——实现单实例无锁多线程安全API

        前阵子写静态lib导出单实例多线程安全API时,出现了CRITICAL_SECTION初始化太晚的问题,之后查看了错误的资料,引导向了错误的理解,以至于今天凌晨看到另一份代码,也不多想的以为s ...

  5. linux静态与动态库创建及使用实例

    一,gcc基础语法: 基本语法结构:(由以下四部分组成) gcc -o 可执行文件名 依赖文件集(*.c/*.o) 依赖库文件及其头文件集(由-I或-L与-l指明) gcc 依赖文件集(*.c/*.o ...

  6. oracle11g asm standalone 单实例重建

    原文地址:oracle11g asm单实例重建has 作者:datapeng 最近到客户那里处理故障,客户说,他们修改了一下hostname,导到has出现了问题,当然,他们的数据库也就无法再启动,把 ...

  7. 从一个Bug说开去--解决问题的思路,Linked Server, Bulk Insert, DataTable 作为参数传递

    声名— 部分内容为杜撰,如有雷同,不胜荣幸! 版权所有,如要引用,请标明出处! 如果打赏,请自便! 1       背景介绍 最近一周在忙一个SQL Server 的Bug,一个简单的Bug,更新两张 ...

  8. Java基础语法实例(2)——实习第二天

    来到广州实习的第二天,广州好潮湿,这就是我的感觉,手表里面都开始产生了水雾,这就尴尬了...每天不断的雨.好吧,尽管我很喜欢这里的树,但是我以后应该也不会再来广州了,其实也说不准.想起了<谁动了 ...

  9. Ubuntu下比较通用的makefile实例

    本文转自http://blog.chinaunix.net/uid-20608849-id-360294.html  笔者在写程序的时候会遇到这样的烦恼:一个项目中可能会有很多个应用程序,而新建一个应 ...

随机推荐

  1. android的签名

    安装好了android studio,默认是使用期限为一年的签名,并且不可以发布到正式版的apk里. 在使用第三方模块或者服务的时候,经常要求提供签名及其sha1或者MD5信息. 事实上这个签名和及其 ...

  2. 从NPM到CNPM

    从NPM到CNPM   原文  http://www.cnblogs.com/hufeng/p/5166479.html 主题 npm 引用NPM网站上的一句话:npm loves you ! NPM ...

  3. SSLPinning 延伸

    AFSecurityPolicy用于验证HTTPS请求的证书,先来看看HTTPS的原理和证书相关的几个问题. HTTPS HTTPS连接建立过程大致是,客户端和服务端建立一个连接,服务端返回一个证书, ...

  4. php登录利用$token验证

    <?php $module = $_GET['module']; $action = $_GET['action']; $token = md5sum($module.date('Y-m-d', ...

  5. 通过HttpModule管道,帮助api对接开发

    我们公司的技术以.net为主,最近公司的项目需要和其它以java为主的公司搞对接.   .net提供webapi由java请求调用. 目前出现java说调用了,但是.net一直接收不到数据.两方开发人 ...

  6. C# Monads的实现(二)

    再谈continuation monad 上一篇中我们已经介绍了continuation monad,但是这个monad与Identity,Maybe,IEnumerable monads稍微难于理解 ...

  7. PerformSelector 和 NSInvocation

  8. Qt_DX

    #ifndef MY_FRAME__HH__ #define MY_FRAME__HH__ #include <QtGui/QWidget> struct IDirect3D9; stru ...

  9. MySQL Logs

    摘要 一.MySQL日志 1.1 查询日志 1.2 慢查询日志 1.3 错误日志 1.4 二进制日志 一. MySQL日志 MySQL服务器上一共有六种日志:错误日志,查询日志,慢查询日志,二进制日志 ...

  10. Windows系统新建gitignore文件出现“必须键入文件名”错误的解决办法

    今天打算把本地的项目用git推送到github上去,但是有的信息我又不想把它加入到版本控制系统中去,例如.classpath文件和.class文件等等,这个时候我就想到了使用.gitignore文件把 ...