#include <stdio.h>

#include "shou_note.h"

struct student *create()  /*这个括号是什么意思?*/

{

//创建 头指针 尾指针 新指针

struct student *phead=NULL;

struct student *pend =NULL;

struct student *pnew =NULL;

int i=0;    //循环变量

//建立链表及第一个结点

//因为第一个结点是头结点,所以要放在循环外面处理

pnew=(struct student*)malloc(sizeof(struct student));

scanf("%s%d",phead->name,phead->age);

phead=pnew=pend;/*现在只有一个结点,同时为三个结点*/

//建立后面三个结点

for(i=1;i<4;i++){

pnew=(struct student*)malloc(sizeof(struct student));

scanf("%s%d",phead->name,phead->age);

pend->next=pnew;

pend=pnew;

}

pend->next=NULL;

return phead;

}

//输出结点

void print(struct student *phead){

struct student *p;  //建立临时指针

p=phead;             //便临时指向头结点

while (p!=NULL) {

printf("姓名:%s 年龄:%d\n",p->name,p->age);

p=p->next;

}

}

//函数:void del 删除指定姓名结点

//参数:struct student *phead,char *name

//返回值:void

void del(struct student *phead,char *name){

//为了简化程序,本函数有一个缺陷:无法删除第一个结点

struct student *pfront=NULL;

struct student *pback =NULL;

pback=phead;

pfront=pback->next;

while (pfront!=NULL) {

if (strcmp(name, pfront->name)==0) //找到名字开始删除

{

//下面进行pfront指向的函数进行删除

pback->next=pfront->next;

free(pfront);

return;

}

pback=pfront;

pfront=pfront->next;

}

printf("要删除的名字未找到.");

}

//插入一个结点在指定姓名之前

void insert(struct student *phead,char *name){

//为了简化结点,本函数有一个缺陷,无法在第一个函数之前插入节点.

struct student *pfront=NULL;

struct student *pback =NULL;

struct student *pnew  =NULL;

//前结点 后结点 新结点

//与删除操作不同的是插入结点要插入新的结点

printf("请输入新节点的姓名和年龄:\n");

scanf("%s%d",pnew->name,pnew->age);

pback=phead;                //后结点指向头结点

pfront=phead->next;         //前结点指向头结点的下一个节点

while (pfront!=NULL) {

if (strcmp(name, pfront->name)==0)//找到名字,开始插入

{

pback->next=pnew;       //使后结点的下一结点指向新结点

pnew->next=pfront;          //新结点的下一节点指向前结点

return;

}

pback=pfront;             //后结点设为前结点

pfront=pfront->next;      //前结点又指向下一结点使前后结点始终保留一个空隙

}

//如果未找到要插入的结点,将新结点插在链表的最后一个

pback->next=pnew;

pnew->next=NULL;

}

#include <stdio.h>

#include "shou_note.h"

#include "shou_note.c"

int main(int argc, const char * argv[]) {

struct student *phead=NULL;  //链表头指针

phead=create();              //创建结点

print(phead);               //输出所有结点

del(phead, "cc");            //删除名为cc的结点

printf("删除节点后的情况:");

print(phead);

insert(phead,"dd");         //在名为dd结点之前插入一个新结点

printf("插入节点后的借点情况:");

print(phead);

return 0;

}

转载于:https://www.cnblogs.com/absorption/p/5384162.html

链表的简单操作-----删除,添加,查找(Xcode)相关推荐

  1. 单链表的简单操作与演示

    单链表的简单操作与演示 单链表 单链表概念和简单的设计 单链表是一种链式存取的数据结构,链表中的数据是以结点来表示的,每个结点由元素和指针构成. 元素表示数据元素的映象,就是存储数据的存储单元:指针指 ...

  2. java 结构体_Java实现单链表的简单操作

    文章目录 前言 一.基本实现思路 二.代码实现 1.定义结点类2.定义链表类3.测试调用4.结果 总结 前言 用Java实现单链表的简单操作,阅读本文和上一篇文章体会Java中类与C++中结构体指针的 ...

  3. java对mysql的简单操作——删除数据

    java连接mysql5.1教程(含代码)+ 查询数据 相关文章推荐: java对mysql的简单操作--增加数据 下面是数据删除片段的代码 Connection conn = null; State ...

  4. java对mysql的简单操作的综合运用——登录+注册+修改密码

    本篇博客是java对mysql的简单操作的综合运用--登录系统.java对mysql的简单操作的综合运用--注册系统.java对mysql的简单操作的综合运用--修改密码系统的整合. 因为使用的是数据 ...

  5. java对mysql的简单操作——增删改查的总结

    增删改查的详细内容可以点击以下链接: java对mysql的简单操作--增加数据 java对mysql的简单操作--删除数据 java对mysql的简单操作--修改数据 java连接mysql5.1教 ...

  6. java对mysql的简单操作——增加数据

    java连接mysql5.1教程(含代码)+ 查询数据 下面是数据添加片段的代码 Connection conn = null; Statement stmt = null; PreparedStat ...

  7. 数据结构:带头双向循环链表——增加、删除、查找、修改,详细解析

    读者可以先阅读这一篇:数据结构--单链表的增加.删除.查找.修改,详细解析_昵称就是昵称吧的博客-CSDN博客,可以更好的理解带头双向循环链表. 目录 一.带头双向循环链表的处理和介绍 1.带头双向循 ...

  8. (C++版)链表(四)——实现双向循环链表创建、插入、删除等简单操作

    http://blog.csdn.net/fisherwan/article/details/25649271 链表(四)实现双向循环链表简单操作,代码如下: [cpp] view plain cop ...

  9. (C语言版)链表(二)——实现单向循环链表创建、插入、删除、释放内存等简单操作

    http://blog.csdn.net/fisherwan/article/details/19754585 昨天写了单向链表的代码,今天上午把单向循环链表的程序给敲完了.链表的相关操作一样的,包含 ...

最新文章

  1. 用好idea这几款插件,可以帮你少写30%的代码!
  2. AIX HA模拟宕机--维护磁带机
  3. 情境感知技术是什么?
  4. Unknown: Failed to get convolution algorithm. This is probably because cuDNN
  5. Hadoop学习之Hadoop集群的定制配置(一)
  6. Hypersonic SQL开源数据库方向比较流行的纯Java开发的关系型数据库
  7. Cortex系列ARM内核介绍
  8. 考研计算机专业课统考吗,09考研计算机专业课统考增至4部分内容
  9. DFS应用——遍历无向图
  10. The Model Driven Software Network
  11. android七牛云存储,Android上传图片到七牛云
  12. android 检查 write_external_storage,android – 如何知道何时需要WRITE_EXTERNAL_STORAGE
  13. 商业信息敏感、安全处理(口令、数字证书-U盾-密保卡、指纹识别-虹膜识别)...
  14. 学JAVA第十三天,方法、方法重载及构造函数
  15. 剑指offer——11.旋转数组的最小数字
  16. 致经典初选的60首备选篇目_致经典复选诵读题库:英诗选篇学前及小学段60首...
  17. Android adb命令开启飞行模式,开启wifi,开启移动数据等相关操作
  18. mac上安装R和RStudio
  19. CAD看图软件怎么快速进行对图纸的打印?
  20. 让男生成熟的十部电影zt

热门文章

  1. [LeetCode]:116:Populating Next Right Pointers in Each Node
  2. android smartbar适配
  3. Debenham养老金项目关键流程1-员工分类流程
  4. JA-SIG(CAS)学习笔记1
  5. MATLAB学习笔记(九)
  6. linux rpm找不到命令_linux书后习题(4-9章不全) - lijinli
  7. java返回链表的中间结点_876. 链表的中间结点
  8. static在内存层面的作用_C++内存管理笔记
  9. oracle delete远程表,用脚本实现表的远程准实时同步
  10. Java 算法 矩阵乘法