1. */
  2. * Copyright (c) 2016,烟台大学计算机与控制工程学院
  3. * All rights reserved.
  4. * 文件名:text.cpp
  5. * 作者:常轩
  6. * 微信公众号:Worldhello
  7. * 完成日期:2016625
  8. * 版本号:V1.0
  9. * 问题描述:对单向链表的增加,删除,插入
  10. * 程序输入:无
  11. * 程序输出:见运行结果
  12. */
  13.  
  14. #include "stdio.h"
  15. #include "stdlib.h"
  16. #include "string.h"
  17.  
  18. struct STUDENT{
  19.  
  20. char name[32];
  21. struct STUDENT *next;
  22. };
  23. void addStudent(STUDENT *stu);
  24. void delStudent(char *name);
  25. void saveStuToFile();
  26. STUDENT *gStu=NULL;
  27. int main()
  28. {
  29.  
  30. int i;
  31. for(i=0;i<100;i++)
  32. {
  33. STUDENT *stu;
  34. stu = (STUDENT *)malloc(sizeof(STUDENT));
  35. memset(stu->name,0,sizeof(stu->name));
  36. sprintf(stu->name,"%s%d","zhangsan",i+1);
  37. addStudent(stu);
  38. }
  39. saveStuToFile();
  40. STUDENT *p;
  41. p = gStu;
  42. while(p)
  43. {
  44. printf("%s\n",p->name);
  45. p= p->next;
  46. }
  47.  
  48. for(i=20;i<30;i++)
  49. {
  50. char name[32];
  51. sprintf(name,"%s%d","zhangsan",i+1);
  52. delStudent(name);
  53. }
  54.  
  55. p = gStu;
  56. while(p)
  57. {
  58. printf("%s\n",p->name);
  59. p= p->next;
  60. }
  61.  
  62. }
  63.  
  64. void addStudent(STUDENT *stu)
  65. {
  66.  
  67. STUDENT *p;
  68. if(gStu==NULL)
  69. {
  70. gStu =stu;
  71. stu->next=NULL;
  72. }
  73. else
  74. {
  75. p = gStu;
  76. while(p)
  77. {
  78. if(p->next==NULL)
  79. {
  80. p->next =stu;
  81. stu->next =NULL;
  82.  
  83. }
  84. p= p->next;
  85.  
  86. }
  87.  
  88. }
  89. }
  90. void delStudent(char *name)
  91. {
  92. STUDENT *p,*pre;
  93. if (gStu==NULL)
  94. {
  95. return;
  96. }
  97. p =pre=gStu;
  98. while(p)
  99. {
  100.  
  101. if (!strcmp(p->name,name))
  102. {
  103. if(p==gStu)
  104. {
  105. gStu = gStu->next;
  106. free(p);
  107. p=NULL;
  108. }
  109. else
  110. {
  111. pre->next =p->next;
  112. free(p);
  113. p=NULL;
  114.  
  115. }
  116. }
  117. else
  118. {
  119. pre =p;
  120. p= p->next;
  121. }
  122. }
  123. }
  124.  
  125. void saveStuToFile()
  126. {
  127. FILE *fp;
  128.  
  129. int filelen;
  130.  
  131. fp = fopen("yyy.txt","w");
  132.  
  133. STUDENT *p;
  134. p = gStu;
  135. while(p)
  136. {
  137. fwrite(p->name,32,1,fp);
  138. p= p->next;
  139.  
  140. }
  141.  
  142. fclose(fp);
  143. }

C++中如何对单向链表操作的更多相关文章

  1. Alan Cox:单向链表中prev指针的妙用

    之前发过一篇二级指针操作单向链表的例子,显示了C语言指针的灵活性,这次再探讨一个指针操作链表的例子,而且是一种完全不同的用法. 这个例子是linux-1.2.13网络协议栈里的,关于链表遍历& ...

  2. C#学习单向链表和接口 IList<T>

    C#学习单向链表和接口 IList<T> 作者:乌龙哈里 时间:2015-11-04 平台:Window7 64bit,Visual Studio Community 2015 参考: M ...

  3. c++(循环单向链表)

    前面的博客中,我们曾经有一篇专门讲到单向链表的内容.那么今天讨论的链表和上次讨论的链表有什么不同呢?重点就在这个"循环"上面.有了循环,意味着我们可以从任何一个链表节点开始工作,可 ...

  4. 输入一个单向链表,输出该链表中倒数第K个结点

    输入一个单向链表,输出该链表中倒数第K个结点,具体实现如下: #include <iostream> using namespace std; struct LinkNode { publ ...

  5. C/C++中对链表操作的理解&&实例分析

    链表概述 链表是一种常见的重要的数据结构.它是动态地进行存储分配的一种结构.它可以根据需要开辟内存单元.链表有一个“头指针”变量,以head表示,它存放一个地址.该地址指向一个元素.链表中每一个元素称 ...

  6. python中的单向链表实现

    引子 数据结构指的是是数据的组织的方式.从单个数据到一维结构(线性表),二维结构(树),三维结构(图),都是组织数据的不同方式. 为什么需要链表? 顺序表的构建需要预先知道数据大小来申请连续的存储空间 ...

  7. java对单向单向链表的操作

    概述:众所周知,数据对于数据的存储时连续的,也就是说在计算机的内存中是一个整体的.连续的.不间断的ADT数据结构.伴随的问题也会随之出现,这样其实对于内存的动态分配是不灵活的.而链表具备这个优点.因此 ...

  8. 【编程题目】输入一个单向链表,输出该链表中倒数第 k 个结点

    第 13 题(链表):题目:输入一个单向链表,输出该链表中倒数第 k 个结点.链表的倒数第 0 个结点为链表的尾指针.链表结点定义如下: struct ListNode {int m_nKey;Lis ...

  9. 输出单向链表中倒数第k个结点

    描述 输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第0个结点为链表的尾指针. 链表结点定义如下: struct ListNode { int       m_nKey; ListNode* ...

随机推荐

  1. 17.3.13---socket网络套接字介绍--函数和数据类型

    1----Socket类型 套接字格式:socket(family,type[,protocal])使用给定的地址族,套接字类型,协议编号(默认为0)来创建套接字 socket类型 描述 socket ...

  2. TPO5-3 The Cambrian Explosion

    At one time, the animals present in these fossil beds were assigned to various modern animal groups, ...

  3. Python基础——类new方法与单例模式

    介绍: new方法是类中魔术方法之一,他的作用是给类实例化开辟一个内存地址,并返回一个实例化,再由__init__对这个实例进行初始化,故它的执行肯定就是在初始化方法__init__之前了.new方法 ...

  4. [徐州网络赛]Longest subsequence

    [徐州网络赛]Longest subsequence 可以分成两个部分,前面相同,然后下一个字符比对应位置上的大. 枚举这个位置 用序列自动机进行s字符串的下标转移 注意最后一个字符 #include ...

  5. CentOS7离线安装MySQL8.0

    CentOS7离线安装MySQL8.0 卸载软件 rpm -e --nodeps 要卸载的软件包 root@jacky zookeeper]# rpm -e --nodeps java-1.6.0-o ...

  6. JDBC常用驱动和语法汇总

    A. Firebird url=jdbc:firebirdsql:[HOST_NAME]/[PORT:][FULL_PATH_TO_DATABASE_FILE] driver=org.firebird ...

  7. 十九、linux--RAID详解

    一.什么是RADI Raid是廉价冗余磁盘阵列,简称磁盘阵列. 运维人员就叫RAID.Raid是一种把多块独立的磁盘(物理磁盘)按不同方式组合起来形成一个磁盘组,在逻辑上看起来就是一个大的磁盘,从而提 ...

  8. 吴裕雄--天生自然 JAVA开发学习:文档注释

    /*** 这个类绘制一个条形图 * @author runoob * @version 1.2 */ import java.io.*; /** * 这个类演示了文档注释 * @author Ayan ...

  9. day19-3个双下item方法

    #使用双下item方法来实现属性的增删改查: # 查:__getitem__ 增改:__setitem__ 删除: __delitem__ class Goods: def __init__(self ...

  10. Minimum Sum

    题目描述 One day, Snuke was given a permutation of length N, a1,a2,…,aN, from his friend. Find the follo ...