C链表操作
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <string.h>
#include <stdio.h> typedef struct Node
{
int data;
struct Node *next;
}SLIST; SLIST *SList_Create(); //创建链表
int SList_Print(SLIST *pHead); //遍历链表
int SList_NodeInsert(SLIST *pHead, int x, int y); //插入值 在x值之前 删除y
int SList_NodeDel(SLIST *pHead, int y);
int SList_Destory(SLIST *pHead); //创建链表
SLIST *SList_Create()
{ SLIST *pHead,/*头节点*/ *pM,/*新节点*/ *pCur/*尾节点*/;
int data;
//创建头节点 并初始化
pHead = (SLIST *)malloc(sizeof(SLIST));
if (pHead == NULL)
{
return NULL;
}
pHead->data = ;
pHead->next = NULL; printf("\nplease enter you data: ");
scanf("%d", &data); pCur = pHead; while (data != -)
{
//创建业务节点 并初始化 不断接受输入 malloc新结点
pM = (SLIST *)malloc(sizeof(SLIST));
if (pM == NULL)
{
return NULL;
}
pM->data = data;
pM->next = NULL; //2 新结点 入链表
pCur->next = pM; //3 新结点变成当前节点
pCur = pM; //链表结点的尾部追加 printf("\nplease enter you data: ");
scanf("%d", &data);
} return pHead;
} //打印链表
int SList_Print(SLIST *pHead)
{
SLIST *tmp = NULL;
if (pHead == NULL)
{
return -;
}
tmp = pHead->next; printf("\nBegin\t");
while (tmp)
{
printf("%d ", tmp->data);
tmp = tmp->next;
}
printf("\tEnd");
return ;
} //插入节点
int SList_NodeInsert(SLIST *pHead, int x, int y)
{
SLIST *pM, *pCur, *pPre; //创建新的业务节点pM
pM = (SLIST *)malloc(sizeof(SLIST));
if (pM == NULL)
{
return -;
}
pM->next = NULL;
pM->data = y; //遍历链表
pPre = pHead;
pCur = pHead->next; while (pCur)
{
if (pCur->data == x)
{
break;
}
pPre = pCur;
pCur = pCur->next;
} //让新结点 连接 后续链表
pM->next = pPre->next;
//让前驱节点 连接 新结点
pPre->next = pM; return ;
}
//删除节点
int SList_NodeDel(SLIST *pHead, int y)
{
SLIST *pCur, *pPre; //初始化状态 pPre = pHead;
pCur = pHead->next; while(pCur != NULL)
{
if (pCur->data == y)
{
break;
}
pPre = pCur;
pCur = pCur->next;
} //删除操作
if (pCur == NULL)
{
printf("没有找到结点值为:%d 的结点\n", y);
return -;
}
pPre->next = pCur->next;
if (pCur != NULL)
{
free(pCur);
}
return ;
} int SList_Destory(SLIST *pHead)
{
SLIST *tmp = NULL;
if (pHead == NULL)
{
return -;
} while (pHead != NULL)
{
tmp = pHead->next;//下一个节点缓存下来
free(pHead);
pHead = tmp;//tmp变成了head
}
return ;
} int SList_Reverse(SLIST *pHead)
{
SLIST *p = NULL; //前驱指针
SLIST *q = NULL; //当前指针
SLIST *t = NULL; //缓存的一个结点 if (pHead==NULL || pHead->next == NULL ||pHead->next->next ==NULL )
{
return ;
} //初始化 //前驱结点
p = pHead->next;
q = pHead->next->next; //p = pHead; //代码能兼容
//q = pHead->next; //一个结点 一个结点的逆置
while(q)
{
t = q->next; //缓冲后面的链表 q->next = p; //逆置 p = q; //让p下移一个结点 q = t;
} //头节点 变成 尾部结点 后 置null
pHead->next->next = NULL;
pHead->next = p; // return ;
}
void main()
{
int ret = ; SLIST *pHead = NULL;
pHead = SList_Create();
ret = SList_Print(pHead); ret = SList_NodeInsert(pHead, , );
ret = SList_Print(pHead); ret = SList_NodeDel(pHead, );
ret = SList_Print(pHead); ret = SList_Reverse(pHead);
ret = SList_Print(pHead); SList_Destory(pHead); printf("hello...\n");
system("pause");
return ;
}
C链表操作的更多相关文章
- JAVA 链表操作:循环链表
主要分析示例: 一.循环链表简述 二.单链表循环链表 三.双链表循环链表 一.循环链表简述 循环链表即链表形成了一个循环的结构,尾节点不再指向NULL,而是指向头节点HEAD,此时判定链表的结束是尾节 ...
- 单链表操作B 分类: 链表 2015-06-07 12:42 15人阅读 评论(0) 收藏
数据结构上机测试2-2:单链表操作B TimeLimit: 1000ms Memory limit: 65536K 题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除 ...
- YTU 2620: B 链表操作
2620: B 链表操作 时间限制: 1 Sec 内存限制: 128 MB 提交: 418 解决: 261 题目描述 (1)编写一个函数createlink,用来建立一个动态链表(链表中的节点个数 ...
- C# 链表操作
关于链表操作,在C#当中微软已经提供了一个LinkedList<T>的数据结构,通过这个类提供的一系列方法就能够实现链表操作. 这里我提供一段代码,这是在论坛里面有人提问时给出的代码,它实 ...
- C语言,单链表操作(增删改查)(version 0.1)
这天要面试,提前把链表操作重新写了一遍.备份一下,以备不时之需. 希望有人能看到这篇代码,并指正. // File Name : list.h #include "stdafx.h" ...
- C语言链表操作模板(添加,删除,遍历,排序)
C语言链表操作模板,摘自郝斌的C语言视频教程,简单的修改成了纯C格式.当年照着视频学习的时候记录下来的,在使用的时候直接拿来修改修改修改能节约不少时间的. /********************* ...
- ZT C语言链表操作(新增单向链表的逆序建立)
这个不好懂,不如看 转贴:C语言链表基本操作http://www.cnblogs.com/jeanschen/p/3542668.html ZT 链表逆序http://www.cnblogs.com/ ...
- C#的链表操作[数据结构-线性表]
链式存储结构图解: 上图中,a1,是数据,紧跟着后面的d1是下一个节点的地址值.也就是一个节点的最后存储的是下一个节点的地址值,最后一个节点的存储的下一个地址值是null,代表链表结束. 1,定义链表 ...
- linux 内核的链表操作(好文不得不转)
以下全部来自于http://www.ibm.com/developerworks/cn/linux/kernel/l-chain/index.html 无任何个人意见. 本文详细分析了 2.6.x 内 ...
- 数据结构之 线性表---单链表操作A (删除链表中的指定元素)
数据结构上机测试2-1:单链表操作A Time Limit: 1000MS Memory limit: 4096K 题目描述 输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据 ...
随机推荐
- (原创)LAMP教程1-下载虚拟机软件
(原创)LAMP教程1 从今天开始会在我的博客更新LAMP教程,第一章节就是安装虚拟机,因为不可能所有的人都有机会操作服务器,所以今天我打算教大家用虚拟机安装配置当下比较流行的框架,lamp. 好了费 ...
- 标准Web系统的架构分层[转]
标准Web系统的架构分层 – 转载请注明出处 1.架构体系分层图 在上图中我们描述了Web系统架构中的组成部分.并且给出了每一层常用的技术组件/服务实现.需要注意以下几点: 系统架构是灵活的,根据需求 ...
- Tableau学习笔记之二
2张图片解析下Tableau 9.0界面的功能 1.数据加载界面: 2.数据分析界面:
- memcpy、memmove、memset及strcpy函数实现和理解
memcpy.memmove.memset及strcpy函数实现和理解 关于memcpy memcpy是C和C++ 中的内存拷贝函数,在C中所需的头文件是#include<string.h> ...
- ORA-15041: diskgroup space exhausted
今天在做一个备份的时候,出现磁盘耗尽的错误,具体如下: RMAN-00571: =========================================================== ...
- LeetCode题解——Container With Most Water
题目: x轴上有一些点,每个点上有一条与x轴垂直的线(线的下端就是这个点,不超出x轴),给出每条线的高度,求这些线与x轴组成的最大面积. 解法: 贪心策略,维持两个指针,分别指向第一个和最后一个元素, ...
- Apache:如何利用.htaccess文件对PHP网站或文件进行伪静态处理
来源:http://www.ido321.com/1123.html 今天get了一招:利用.htaccess文件对PHP网站或文件进行伪静态处理. 一.检查服务器是否支持伪静态处理: 必 须要空间支 ...
- Linux下用Intel编译器编译安装NetCDF-Fortan库(4.2以后版本)
本来这个问题真的没必要写的,可是真的困扰我太久%>_<%,决定还是记录一下. 首先,最权威清晰的安装文档还是官方的: Building the NetCDF-4.2 and later F ...
- 新購電腦筆記 - G1.Sniper B7 內建網路晶片在 Mint 17.2(Cinnamon)上無法使用(已解決)
又好久沒寫文章了,這次因新購電腦,有一些狀況,故做一下記錄,也分享給遇到同樣問題的格友 以前在公司裝 Ubuntu 從沒遇過這麼多問題,這次自己第一次組電腦,也第一次裝 Mint,問題倒是不少 第一個 ...
- 五、python使用模块
if __name__=='__main__':用法: 当我们在命令行运行模块文件时,Python解释器把一个特殊变量__name__置为__main__,而如果在其他地方导入该hello模块时,if ...