c语言的链表怎么写,写一个C语言的链表记录一下
#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语言的链表记录一下相关推荐
- 在纸上写好一个c语言程序后,上机运行的基本步骤为,c基本概念(选择题).docx
PAGE / NUMPAGES 一.单选题 1.下面叙述中正确的是: (A) 在C语言程序中,main()函数必须放在程序的开始位置 (B) 在C语言程序中,要调用的函数必须在main()函数中定义 ...
- IOS学习笔记04---编写第一个C语言程序-Hello World
IOS学习笔记04---编写第一个C语言程序-Hello World -------------------------------------------------------- ...
- 手把手教你写第一个C语言程序
C语言是所有编程语言的基础,历经50多年的发展依然被众多编程者使用,那么怎么写C语言程序呢?下面我将从项目的创建开始一步步交大家写第一个C语言程序. 一.C语言项目的创建: C语言是一门编译型语言.所 ...
- c语言小游戏vc,C语言探索之旅:第一个C语言小游戏
C语言探索之旅:第一个C语言小游戏-1.jpg (37.05 KB, 下载次数: 0) 2018-10-8 19:23 上传 内容简介 1.课程纲领 2.第一部分第八课:第一个C语言小游戏 3.第一部 ...
- 编译我的第一个c语言,linux菜鸟学习写第一个C语言代码--“hello Linux!”
2004年4月20日最新版本的GCC编译器3.4.0发布了.目前,GCC可以用来编译C/C++.FORTRAN.JAVA.OBJC.ADA等语言的程序,可根据需要选择安装支持的语言.GCC 3.4.0 ...
- c语言变量名由啥组成,一个c语言是由什么构成
大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 一个C语言由数据类型.常量与变量.数组.指针.字符串.文件输入或者输出构成.C语言是一门面向过程的计算机编程语言,C语言的设计目标 ...
- 第02章 c语言初探(c语言笔记)2.1 第一个 C 语言程序
2.1 第一个 C 语言程序 写C/C++可以用这个软件: 打开这个软件,然后点击左上角的[文件],[新建],[源代码] 之后会出现这样的界面: 先写一个简单的程序: 然后点击[编译运行],如下图: ...
- c语言是由什么构成的,一个c语言是由什么构成
一个C语言由数据类型.常量与变量.数组.指针.字符串.文件输入或者输出构成.C语言是一门面向过程的计算机编程语言,C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.仅产生少量的机器码以及不 ...
- 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语 ...
- c语言 方程改main的值_C语言编程笔记丨编写第一个C语言程序hello world,我教你哇...
如果用C语言输出:Hello,world!,该如何编写程序? **代码如下:** #include//包含标准库的信息 main()//定义名为main的函数,不接受参数值 {//main函数的语句都 ...
最新文章
- 【leetcode】 算法题1 两数之和
- dlopen函数的用法
- hive窗口函数_Hive sql窗口函数源码分析
- python文件路径过滤器_SUMO入门(八) - 从Python引入TraCI接口
- SSD固态硬盘4K对齐一键分区
- cypress自动化--运行测试用例报告输出
- Java 计算工作时间 除去周末、节假日
- 动态内存分配算法:首次适应算法,循环首次适应算法,最坏适应算法,最佳适应算法实现
- 中考考试的指令广播_考试语音指令系统
- 如何知道qq号手机号后三位_知道位
- 微信公众号开发淘宝优惠券查询的思路和原理
- java 输出13060个繁体字集的Unicode码
- 国产FPGA市场格局及进展
- 程序员应该知道的国外技术网站
- matlab打开网页输入密码,MATLAB GUI 密码输入
- FPGM(Filter Pruning via Geometric Median)笔记
- ❤️数据可视化❤️:基于Echarts + GeoJson实现的地图视觉映射散点(气泡)组件【4】 - 广东省
- 未来共享出行自动驾驶安全威胁预测
- hbw-utils - 基本数据类型的toString()实现
- Laravel 使用数组条件查询时 in和or 的用法
热门文章
- Linux内核:kprobe机制-探测点
- GitHub:Python 强化学习实用指南
- Python String:一文彻底粉碎字符串
- python3无法安装rpi gpio咋办_如何将RPi.GPIO安装到windows
- Kotlin的继承(二)
- html的标签位置属性(学习笔记)
- flutter 获取android 还是ios_Flutter完整开发实战详解(二十、 Android PlatformView 和键盘问题)...
- Linux内存错误系统重启,linux服务器硬件报错,系统异常重启检测-MCElog
- linux thread 状态检查,Linux下查看进程的线程 - pstree
- java websocket原理_Java WebSocket基本原理