#include <stdio.h>
#include <stdlib.h>//节点结构体
struct Node
{int a;struct Node *pNext;
} ;//链表的头尾指针
struct Node *g_pHead=NULL;
struct Node *g_pEnd=NULL; //链表清空  需要遍历
void qingkong() ;
//创建链表,在链表中增加一个数据(头添加)
void Add(int a);
//遍历链表,查,查指定的
void chakan() ;
//查询指定节点
struct Node *SelectNode(int a);
//指定位置插入节点
void charu(int index,int a);//头添加+头删除=栈//头添加+ 尾删除  或者:尾添加+头删除 =队列//头删除
void shanchutou();
//尾删除
void shanchuwei();
//删除指定节点
void ShanChuZhiding(int a);int main()
{int a[]={1,2,3};//数组传进链表 int i=0;for(i=0;i<3;i++){Add(a[i]);}chakan() ;//遍历 charu(1,5);//在1的后面添加5 //查找指定的struct Node *pFind=SelectNode(3) ;if(pFind!=NULL)  //找到了{printf("%d\n",pFind->a );} elseprintf("没有查找到相应数据");printf("\n"); chakan() ;//遍历 printf("\n"); shanchutou();//删除头 chakan() ;//遍历 printf("\n"); shanchuwei();chakan() ;//遍历 printf("\n"); ShanChuZhiding(2);//删除2 chakan() ;//遍历 qingkong(); system("pause");return 0;
}//链表清空  需要遍历
void qingkong()
{struct Node *pTemp=g_pHead;//定义一个 pTemp指针指向开头 while(pTemp!=NULL){struct Node *pt=pTemp;//不可以free(pTemp) pTemp=pTemp->pNext;free(pt);  //先定义一个指针去记录 pTemp再释放 g_pHead=NULL;g_pEnd=NULL;//头尾清空 }
}//创建链表,在链表中增加一个数据(头添加)
void Add(int a)
{struct Node *pTemp=(struct Node *)malloc(sizeof(struct Node));pTemp->a=a;pTemp->pNext=NULL;//必须 if(g_pHead==NULL){g_pHead=pTemp;g_pEnd=pTemp;}else{pTemp->pNext=g_pHead;g_pHead=pTemp;}
}//遍历链表,查,查指定的
void chakan()
{struct Node *pTemp=g_pHead;//定义一个 pTemp指针指向开头 while(pTemp!=NULL){printf("%d\n",pTemp->a ); pTemp=pTemp->pNext;}
}//查询指定节点
struct Node *SelectNode(int a)
{struct Node *pTemp=g_pHead;//定义一个 pTemp指针指向开头 while(pTemp!=NULL){if(pTemp->a==a){return pTemp;}pTemp=pTemp->pNext;}return NULL;  //没找到
}//指定位置插入节点
void charu(int index,int a)
{if(NULL==g_pHead){printf("链表没有节点"); return ; }//找位置struct Node *pt= SelectNode(index);if(pt==NULL){printf("没有指定节点/n");}//有节点,给a创建节点 struct Node *pTemp=(struct Node *)malloc(sizeof(struct Node));pTemp->a=a;pTemp->pNext=NULL; //连接链表if(pt==g_pEnd){g_pEnd->pNext=pTemp;//尾巴最后一个指向新节点 g_pEnd=pTemp;//新节点最后一个变成尾巴 } else{pTemp->pNext=pt->pNext;//先连pt->pNext=pTemp;}
}//头删除
void shanchutou()
{if(NULL==g_pHead){printf("链表为空\n");}struct Node *pTemp=g_pHead;//记录旧的头g_pHead=g_pHead->pNext;//头的下一个变成新的头 free(pTemp);
}//尾删除
void shanchuwei()
{if(NULL==g_pHead){printf("链表为空\n");}//链表不为空//链表有1个节点 if(g_pHead==g_pEnd){free(g_pHead);g_pHead=NULL;g_pEnd=NULL;} else  //多个节点 {//找到尾巴前一个节点 struct Node *pTemp=g_pHead;while(pTemp->pNext!=g_pEnd) {pTemp=pTemp->pNext;}//找到了后:1:释放 free(g_pEnd);g_pEnd=pTemp; //2尾巴下移g_pEnd->pNext=NULL; //3尾巴的下一条指针赋值为空 }
}//删除指定节点
void ShanChuZhiding(int a)
{//链表判断if(NULL==g_pHead){printf("链表为空\n");return ;}//链表有东西 找节点struct Node *pTemp=SelectNode(a); if(NULL==pTemp){printf("没有节点\n");return ;}//找到了//只有一个节点if(g_pHead==g_pEnd){shanchutou();}//两个节点else if(g_pHead->pNext==g_pEnd){if(g_pHead==pTemp){shanchutou();}else{shanchuwei();}}//多个节点 else{if(g_pHead==pTemp){shanchutou();}else if(g_pEnd==pTemp){shanchuwei();}else{//找到删除节点的前一个节点struct Node *pT=g_pHead;while(pT->pNext!=pTemp){pT=pT->pNext;}//找到了//连接pT->pNext=pTemp->pNext;free(pTemp);//释放 }}}

运行结果:

无空头链表详解(增删改查)相关推荐

  1. 【无标题】vue 简单增删改查表格

    <template><div><h2>table简单增删改查</h2><input type="text" v-model=& ...

  2. 单链表LinkedList的增删改查

    数组作为数据存储结构有一定的缺陷.在无序数组中,搜索性能差,在有序数组中,插入效率又很低(插入位置后面的元素需要集体后移),而且这两种数组的删除效率(集体前移)都很低,并且数组在创建后,其大小是固定了 ...

  3. C语言:构建一个二级链表并完成增删改查

    构建一个下图所示的链表,并完成增.删.改.查 示例代码: #include <stdio.h> #include <stdlib.h> #include <string. ...

  4. c语言实现双链表的基本操作—增删改查

    //初始化 Node*InitList() {Node*head=(Node*)malloc(sizeof(Node));if(NULL==head){printf("内存分配失败!&quo ...

  5. java单链表 提供增删改查_java实现单链表增删改查的实例代码详解

    package 数据结构算法.链表; /* *定义节点 * 链表由节点构成 */ public class node { private e e; //数据data private node next ...

  6. bootstrap表格遍历_BootStrap实现带有增删改查功能的表格(DEMO详解)

    前言 bootstrap的表格样式,有类似EasyUI的表格,也有卡片式表格,放到移动端显示,各有千秋.但是BootStrap自带的表格是没有操作列的,网上的资源不少,但是都是比较单一.零碎,JS.C ...

  7. bootstrap 获取表格修改的结果_BootStrap实现带有增删改查功能的表格(DEMO详解)

    前言 bootstrap的表格样式,有类似EasyUI的表格,也有卡片式表格,放到移动端显示,各有千秋.但是BootStrap自带的表格是没有操作列的,网上的资源不少,但是都是比较单一.零碎,JS.C ...

  8. BootStrap实现带有增删改查功能的表格(DEMO详解)

    前言 bootstrap的表格样式,有类似EasyUI的表格,也有卡片式表格,放到移动端显示,各有千秋.但是BootStrap自带的表格是没有操作列的,网上的资源不少,但是都是比较单一.零碎,JS.C ...

  9. Redis 增删改查详解

    Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.一个高性能的key-value数据库.并提供多种语言的API.说到Key-Value数据库NoSQL数据库可以想 ...

最新文章

  1. SQL查找是否存在,别再count了,很耗费时间的
  2. poj - 3786 Repeater
  3. vue 打包后访问接口报错404 解决方案 (前提是在vue里使用了代理)
  4. NYOJ 460 项链
  5. 互斥锁 QMutex Class 的翻译
  6. VTK:图表之EdgeWeights
  7. python urllib安装_Python Urllib库
  8. Eclipse中错误为 Access restriction 的解决方案
  9. 【nginx】nginx 动静分离
  10. 获取设置套接字选项:getsockopt, setsockopt
  11. ASP.NET Core的身份认证框架IdentityServer4--(5)自定义用户登录(通过接口登录,无UI版本)...
  12. keep it SMPL: Automatic estimation of 3d human pose and shape from a single image
  13. C# 文件读取(一)
  14. 医药行业数据分析软件(含非付费)--对比分析
  15. [android基础知识] 之十三: Runtime.getRuntime()
  16. (翻译)简化模式(Reduce)
  17. C语言小程序实现输出国际象棋棋盘
  18. 全球主要语言缩写对照
  19. Android 编译优化探索
  20. 大学生学计算机打字速度,浅谈提高小学生计算机打字速度

热门文章

  1. 剑鱼行动(普里姆算法)
  2. python可以这样学豆瓣_python爬虫学习之路:豆瓣爬虫练习
  3. jsp mysql代码提示错误,Web工程出现错误mysql错误
  4. vmware安装linux不能和主机互通,Ubuntu18.04系统主机与虚拟机互通问题的解决方法...
  5. python控制台不能输入_python实现在控制台输入密码不显示的方法
  6. vuecli 实战商城后台管理系统_前台商城系统及后台管理系统
  7. 多层次报表的性能优化方案
  8. 设计模式之工厂模式(Factory)(3)
  9. C#基础 字符串读取/写入文本文件 代码示例
  10. webpack初学笔记 之 小案例篇demo1