#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链表操作的更多相关文章

  1. JAVA 链表操作:循环链表

    主要分析示例: 一.循环链表简述 二.单链表循环链表 三.双链表循环链表 一.循环链表简述 循环链表即链表形成了一个循环的结构,尾节点不再指向NULL,而是指向头节点HEAD,此时判定链表的结束是尾节 ...

  2. 单链表操作B 分类: 链表 2015-06-07 12:42 15人阅读 评论(0) 收藏

    数据结构上机测试2-2:单链表操作B TimeLimit: 1000ms Memory limit: 65536K 题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除 ...

  3. YTU 2620: B 链表操作

    2620: B 链表操作 时间限制: 1 Sec  内存限制: 128 MB 提交: 418  解决: 261 题目描述 (1)编写一个函数createlink,用来建立一个动态链表(链表中的节点个数 ...

  4. C# 链表操作

    关于链表操作,在C#当中微软已经提供了一个LinkedList<T>的数据结构,通过这个类提供的一系列方法就能够实现链表操作. 这里我提供一段代码,这是在论坛里面有人提问时给出的代码,它实 ...

  5. C语言,单链表操作(增删改查)(version 0.1)

    这天要面试,提前把链表操作重新写了一遍.备份一下,以备不时之需. 希望有人能看到这篇代码,并指正. // File Name : list.h #include "stdafx.h" ...

  6. C语言链表操作模板(添加,删除,遍历,排序)

    C语言链表操作模板,摘自郝斌的C语言视频教程,简单的修改成了纯C格式.当年照着视频学习的时候记录下来的,在使用的时候直接拿来修改修改修改能节约不少时间的. /********************* ...

  7. ZT C语言链表操作(新增单向链表的逆序建立)

    这个不好懂,不如看 转贴:C语言链表基本操作http://www.cnblogs.com/jeanschen/p/3542668.html ZT 链表逆序http://www.cnblogs.com/ ...

  8. C#的链表操作[数据结构-线性表]

    链式存储结构图解: 上图中,a1,是数据,紧跟着后面的d1是下一个节点的地址值.也就是一个节点的最后存储的是下一个节点的地址值,最后一个节点的存储的下一个地址值是null,代表链表结束. 1,定义链表 ...

  9. linux 内核的链表操作(好文不得不转)

    以下全部来自于http://www.ibm.com/developerworks/cn/linux/kernel/l-chain/index.html 无任何个人意见. 本文详细分析了 2.6.x 内 ...

  10. 数据结构之 线性表---单链表操作A (删除链表中的指定元素)

    数据结构上机测试2-1:单链表操作A Time Limit: 1000MS Memory limit: 4096K 题目描述 输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据 ...

随机推荐

  1. Delphi的windows剪切板操作函数

    1. Clipbrd函数 function Clipboard: TClipboard;:若应用程序从未使用过剪贴板,则调用该函数形成新的剪贴板:若之前使用过剪贴板则返回使用过的剪贴板. 属性: As ...

  2. erp验收测试

    软件测试是为了发现错误而执行程序的过程.它不仅是软件开发阶段的有机组成部分,而且在整个软件工程(即软件定义.设计和开发过程)中占据相当大的比重.软件测试是软件质量保证的关键环节,直接影响着软件的质量评 ...

  3. 关于c3p0配置详细说明

    <!-- c3p0连接池配置 --> <property name="driverClass" value="${c3p0.driverClass}&q ...

  4. ExcelUtils 导表实例

    @RequestMapping("/dealer/chargebook/exportv.htm")    public void getChargeBookList(int epm ...

  5. linux进程调度函数浅析(基于3.16-rc4)

    众所周知,进程调度使用schedule()函数来完成,下面我们从分析该函数开始,代码如下(kernel/sched/core.c): asmlinkage __visible void __sched ...

  6. Spark系列(十)TaskSchedule工作原理

    工作原理图 源码分析: 1.) 25              launchedTask = true 26            } 27          } catch { 28         ...

  7. 搭建linux下teamspeak3多人语音服务器

    最近项目中新的需求,需要支持多人在线实时通话.就安装测试一下teamspeak.http://www.teamspeak.com/ 主页有服务器版本和客户端版本供下载安装.软硬件环境: melot@m ...

  8. 第二百九十九天 how can I 坚持

    不是傻,就是因为人太好了,我宁愿相信是我人太好了,好吧,我就是对人都挺好,这是病吗. 昨天一起吃的饭一起AA了,挺好,这种事就得AA,玩的挺happy. 还有.感觉自己好傻,老是遇事焦虑,以后试着改变 ...

  9. mysql注册服务

    http://www.2cto.com/database/201301/185456.html ____________________________________________________ ...

  10. 06 java中常量以及常量池

    1.举例说明 变量 常量 字面量 int a=10; float b=1.234f; String c="abc"; final long d=10L; a,b,c为变量,d为常量 ...