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个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据 ...
随机推荐
- 使用HttpURLConnection下载文件时出现 java.io.FileNotFoundException彻底解决办法
使用HttpURLConnection下载文件时经常会出现 java.io.FileNotFoundException文件找不到异常,下面介绍下解决办法 首先设置tomcat对get数据的编码:con ...
- 转载--详解tomcat配置
http://www.importnew.com/17124.html 原文链接 几乎所有容器类型的应用都会包含一个名为 server.xml 的文件结构.基本上,其中的每个元数据或者配置都是容器完 ...
- IE 8兼容:X-UA-Compatible的解释
来源:http://www.ido321.com/940.html 来自StackOverFlow 问题描述: 1: <meta http-equiv="X-UA-Compatible ...
- linux常用命令[持续更新]
top 察看系统状态,退出按q ps -A 察看所有进程 ps -A|grep gcalc|awk '{print $1}'|xargs kill 杀掉所有gcalc进程
- 如何用十条命令在一分钟内检查Linux服务器性能
“如果你的Linux服务器突然负载暴增,报警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?来看Netflix性能工程团队的这篇博文,看它们通过十条命令在一分钟内对机器性能问题进行诊断 ...
- 【转】iOS开发--一步步教你彻底学会『iOS应用间相互跳转』
1. 应用间相互跳转简介 在iOS开发的过程中,我们经常会遇到需要从一个应用程序A跳转到另一个应用程序B的场景.这就需要我们掌握iOS应用程序之间的相互跳转知识. 下面来看看我们在开发过程中遇到的应用 ...
- DelphiXE7中创建WebService(服务端+客户端)
相关资料: http://www.2ccc.com/news/Html/?1507.html http://www.dfwlt.com/forum.php?mod=viewthread&tid ...
- JSF 2 textarea example
In JSF, you can use the <h:inputTextarea /> tag to render a HTML textarea field. For example, ...
- Spring JdbcTemplate Querying examples
Here are few examples to show you how to use JdbcTemplate query() methods to query or extract data f ...
- mysql从一个表中拷贝数据到另一个表中sql语句
这一段在找新的工作,今天面试时,要做一套题,其中遇到这么一句话,从一个表中拷贝所有的数据到另一个表中的sql是什么? 原来我很少用到,也没注意过这个问题,面试后我上网查查,回来自己亲手写了写,测试了下 ...