#include #include

//节点结构体

structNode

{int a; //数据位

struct Node* pNext; //地址位

};//全局和局部的区别

struct Node* g_pHead = NULL; //头指针

struct Node* g_pEnd = NULL; //尾指针//函数声明

void AddListTill(int a); //创建一个链表,在链表中添加数据(尾添加)可以用于队列

void AddListHead(int a); //创建一个链表,在链表中添加数据(头添加)可以用于栈

void DeleteHead(); //头删除

void DeleteTill(); //尾删除

void ScanList(); //遍历链表(查1个 或者全查)

struct Node* SelectNode(int a); //查询指定节点

void FreeList(); //链表清空

void FreeRandNode(int a); //删除指定节点

void AddListRand(int index, int a); //指定位置插入节点

int main(void) {

g_pHead;

AddListTill(1);

AddListTill(2);

AddListTill(3);

AddListTill(4);

AddListHead(0);

ScanList();//01234

AddListRand(1,1);

ScanList();//011234

DeleteHead();

ScanList();//11234

DeleteTill();//ScanList();//1123

struct Node*pFind;

pFind= SelectNode(2);if (pFind !=NULL) {

printf("find num : %d\n", pFind->a);

}else{

printf("find nothing\n");

}

FreeRandNode(2);

ScanList();//1134

system("pause");return 0;

}void AddListTill(inta) {//创建一个节点

struct Node* pTmep = (struct Node*)malloc(sizeof(structNode));//节点数据赋值

pTmep->a =a;

pTmep->pNext =NULL;//将节点链接到我的链表中

if (NULL == g_pEnd || NULL ==g_pHead) {

g_pHead=pTmep;

}else{

g_pEnd->pNext =pTmep;

}

g_pEnd=pTmep;

}void AddListHead(inta) {//创建一个节点

struct Node* pTmep = (struct Node*)malloc(sizeof(structNode));//节点数据赋值

pTmep->a =a;

pTmep->pNext =NULL;//将节点链接到我的链表中

if (NULL == g_pEnd || NULL ==g_pHead) {

g_pHead=pTmep;

g_pEnd=pTmep;

}else{

pTmep->pNext =g_pHead;

g_pHead=pTmep;

}

}voidScanList() {struct Node* pTemp = g_pHead; //定义一个中间变量指向头部为了防止改变原来的链表//bool类型 !pTemp

while (pTemp !=NULL) {

printf("%d", pTemp->a);

pTemp= pTemp->pNext;

}

printf("\n");

}struct Node* SelectNode(inta)

{struct Node* pTemp =g_pHead;while (pTemp !=NULL) {if (a == pTemp->a) {returnpTemp;

}

pTemp= pTemp->pNext;

}returnNULL;

}voidFreeList() {struct Node* pTemp =g_pHead;while (pTemp !=NULL) {struct Node* pt =pTemp;

pTemp= pTemp->pNext;free(pt);

}//一定记得要初始化方便下次操作

g_pHead =NULL;

g_pEnd=NULL;

}void FreeRandNode(inta) {if (NULL ==g_pHead) {

printf("链表为空,无需释放!!\n");

}struct Node* pTemp =SelectNode(a);if (NULL ==pTemp) {

printf("没有这个节点\n");return;

}//一个节点

if (g_pEnd ==g_pHead) {

DeleteHead();

}//两个节点

else if (g_pHead->pNext ==g_pEnd) {if (g_pHead ==pTemp) {

DeleteHead();

}else if (g_pEnd ==pTemp) {

DeleteTill();

}

}//多个节点

else{if (g_pHead ==pTemp) {

DeleteHead();

}else if (g_pEnd ==pTemp) {

DeleteTill();

}else{//找到要删除的前一个节点

struct Node* pt=g_pHead;while (pt->pNext !=pTemp)

{

pt= pt->pNext;

}//链接

pt->pNext = pTemp->pNext;//释放

free(pTemp);

}

}

}voidDeleteHead() {if (NULL ==g_pHead){

printf("链表为空,无需释放!!\n");

}//记住旧的头

struct Node* pTemp =g_pHead;//下一个节点变成新的头

g_pHead = g_pHead->pNext;//释放旧的头

free(pTemp);

}voidDeleteTill() {if (NULL ==g_pEnd) {

printf("链表为空,无需释放!!\n");return;

}if (g_pHead ==g_pEnd) {free(g_pHead);

g_pEnd=NULL;

g_pHead=NULL;

}else{//找尾巴前一个节点

struct Node* pTemp =g_pHead;while (pTemp->pNext !=g_pEnd) {

pTemp= pTemp->pNext;

}//释放尾巴

free(g_pEnd);//尾巴前移

g_pEnd =pTemp;//尾巴下一个为空

g_pEnd->pNext =NULL;

}

}void AddListRand(int index, inta) {if (NULL ==g_pHead) {

printf("链表为空,无需释放!!\n");return;

}struct Node* pt =SelectNode(index);if (NULL ==pt) {

printf("没有指定节点\n");return;

}//有节点创建新节点

struct Node* pTmep = (struct Node*)malloc(sizeof(structNode));

pTmep->a =a;

pTmep->pNext =NULL;//链接到链表

if (pt ==g_pEnd) {

g_pEnd->pNext =pTmep;

g_pEnd=pTmep;

}else{//先连

pTmep->pNext = pt->pNext;//后断

pt->pNext =pTmep;

}

}

c语言的链表怎么写,写一个C语言的链表记录一下相关推荐

  1. 在纸上写好一个c语言程序后,上机运行的基本步骤为,c基本概念(选择题).docx

    PAGE / NUMPAGES 一.单选题 1.下面叙述中正确的是: (A) 在C语言程序中,main()函数必须放在程序的开始位置 (B) 在C语言程序中,要调用的函数必须在main()函数中定义 ...

  2. IOS学习笔记04---编写第一个C语言程序-Hello World

    IOS学习笔记04---编写第一个C语言程序-Hello World --------------------------------------------------------         ...

  3. 手把手教你写第一个C语言程序

    C语言是所有编程语言的基础,历经50多年的发展依然被众多编程者使用,那么怎么写C语言程序呢?下面我将从项目的创建开始一步步交大家写第一个C语言程序. 一.C语言项目的创建: C语言是一门编译型语言.所 ...

  4. c语言小游戏vc,C语言探索之旅:第一个C语言小游戏

    C语言探索之旅:第一个C语言小游戏-1.jpg (37.05 KB, 下载次数: 0) 2018-10-8 19:23 上传 内容简介 1.课程纲领 2.第一部分第八课:第一个C语言小游戏 3.第一部 ...

  5. 编译我的第一个c语言,linux菜鸟学习写第一个C语言代码--“hello Linux!”

    2004年4月20日最新版本的GCC编译器3.4.0发布了.目前,GCC可以用来编译C/C++.FORTRAN.JAVA.OBJC.ADA等语言的程序,可根据需要选择安装支持的语言.GCC 3.4.0 ...

  6. c语言变量名由啥组成,一个c语言是由什么构成

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 一个C语言由数据类型.常量与变量.数组.指针.字符串.文件输入或者输出构成.C语言是一门面向过程的计算机编程语言,C语言的设计目标 ...

  7. 第02章 c语言初探(c语言笔记)2.1 第一个 C 语言程序

    2.1 第一个 C 语言程序 写C/C++可以用这个软件: 打开这个软件,然后点击左上角的[文件],[新建],[源代码] 之后会出现这样的界面: 先写一个简单的程序: 然后点击[编译运行],如下图: ...

  8. c语言是由什么构成的,一个c语言是由什么构成

    一个C语言由数据类型.常量与变量.数组.指针.字符串.文件输入或者输出构成.C语言是一门面向过程的计算机编程语言,C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.仅产生少量的机器码以及不 ...

  9. c语言编程1 1=2,编写一个C语言程序:求S=1/1+1/2+1/3+…+1/n

    编写一个C语言程序:求S=1/1+1/2+1/3+-+1/n以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 编写一个C语 ...

  10. c语言 方程改main的值_C语言编程笔记丨编写第一个C语言程序hello world,我教你哇...

    如果用C语言输出:Hello,world!,该如何编写程序? **代码如下:** #include//包含标准库的信息 main()//定义名为main的函数,不接受参数值 {//main函数的语句都 ...

最新文章

  1. 【leetcode】 算法题1 两数之和
  2. dlopen函数的用法
  3. hive窗口函数_Hive sql窗口函数源码分析
  4. python文件路径过滤器_SUMO入门(八) - 从Python引入TraCI接口
  5. SSD固态硬盘4K对齐一键分区
  6. cypress自动化--运行测试用例报告输出
  7. Java 计算工作时间 除去周末、节假日
  8. 动态内存分配算法:首次适应算法,循环首次适应算法,最坏适应算法,最佳适应算法实现
  9. 中考考试的指令广播_考试语音指令系统
  10. 如何知道qq号手机号后三位_知道位
  11. 微信公众号开发淘宝优惠券查询的思路和原理
  12. java 输出13060个繁体字集的Unicode码
  13. 国产FPGA市场格局及进展
  14. 程序员应该知道的国外技术网站
  15. matlab打开网页输入密码,MATLAB GUI 密码输入
  16. FPGM(Filter Pruning via Geometric Median)笔记
  17. ❤️数据可视化❤️:基于Echarts + GeoJson实现的地图视觉映射散点(气泡)组件【4】 - 广东省
  18. 未来共享出行自动驾驶安全威胁预测
  19. hbw-utils - 基本数据类型的toString()实现
  20. Laravel 使用数组条件查询时 in和or 的用法

热门文章

  1. Linux内核:kprobe机制-探测点
  2. GitHub:Python 强化学习实用指南
  3. Python String:一文彻底粉碎字符串
  4. python3无法安装rpi gpio咋办_如何将RPi.GPIO安装到windows
  5. Kotlin的继承(二)
  6. html的标签位置属性(学习笔记)
  7. flutter 获取android 还是ios_Flutter完整开发实战详解(二十、 Android PlatformView 和键盘问题)...
  8. Linux内存错误系统重启,linux服务器硬件报错,系统异常重启检测-MCElog
  9. linux thread 状态检查,Linux下查看进程的线程 - pstree
  10. java websocket原理_Java WebSocket基本原理