C语言实现线性表(链式存储方式)
#include <stdio.h>
#include <stdlib.h> //提供malloc()原型 typedef struct LNode *List;
typedef int ElementType;
//定义数据结构的自定义名称 struct LNode{
ElementType Data; //数据域
List Next; //指针域
}; struct LNode L;
List PtrL; int Length(List PtrL) //链表头指针
/*表长*/
{
List p = PtrL; //临时的指针 p 指向表的第一个节点
int j = ; //计数器作用
while(p) //遍历单向链表
{
p = p->Next;
j++; //当前p指向的是第j个节点
}
return j;
} List FindKth(int K,List PtrL)
/*查找-序号*/
{
List p = PtrL;
int i = ;
while (p!= NULL && i < K)
{
p = p->Next;
i++;
}
if (i==K)
{
return p; //找到K位置,返回指针
}
else
{
return NULL; //未找到,返回空
}
} List Find(ElementType X,List PtrL)
/*查找-值*/
{
List p = PtrL;
while (p != NULL && p->Data != X)
{
p = p->Next;
}
return p; //找到X,返回指针,未找到X,返回NULL
} List Insert(ElementType X, int i, List PtrL)
/*插入*/
//步骤: 1、 构造一个新结点,用s指向
// 2、 找到链表的第i-1个结点,用p指向
// 3、 然后修改指针,插入结点
// s-Next指向 p->Next,p->Next指向s,
{
List p , s;
if(i == ) //表头插入结点
{
s = (List )malloc(sizeof(struct LNode)); //申请结点空间
s->Data = X; //填充结点
s->Next = PtrL;
return s;
}
p = FindKth(i-, PtrL); //查找第i-1个结点
if(p==NULL)
{
printf("参数%d错误",i);
return NULL; //i-1结点不存在
}
else
{
s = (List)malloc(sizeof(struct LNode)); //申请结点空间
s->Data = X;
s->Next = p->Next;
p->Next = s;
return PtrL;
}
} List Delete(int i, List PtrL)
/*删除*/
{
List p ,s;
if(i==) //删除表的第一个节点
{
s = PtrL; //s指向第一个节点
if (PtrL != NULL)
{
PtrL = PtrL->Next; //从链表中删除
}
else
{
return NULL;
}
free(s); //释放s
return PtrL;
}
p = FindKth(i- , PtrL); //查找第i-1个结点
if (p == NULL)
{
printf("%d 节点不存在",i-);
return NULL;
}
else if (p ->Next == NULL)
{
printf("%d 节点不存在",i);
return NULL;
}
else
{
s = p->Next; //s 指向第i个结点
p->Next = s->Next; //从链表中删除
free(s); //释放被删除的结点
return PtrL;
}
} int main()
{
int j;
int i =;
List p; j=Length(PtrL); //计算长度
printf("当前长度:%d\n",j); PtrL=Insert(,,PtrL); //在表头插入结点 p=FindKth(,PtrL);
printf("查找头结点的值:%d\n",p->Data); //按照序号查找并打印结果 p=Find(,PtrL);
printf("查找数值5:%d\n",p->Data); //按照值查找并打印结果 printf("插入数值3\n");
Insert(,,PtrL); //插入操作 p=Delete(,PtrL);
printf("删除头结点后,当前头结点数值:%d\n",p->Data); //删除头结点 j=Length(&L); //计算长度
printf("当前长度:%d\n",j); return ;
}
C语言实现线性表(链式存储方式)的更多相关文章
- 线性表->链式存储->双向链表
文字描述 之前的链表(单链表.循环链表)的链式存储结构中只有一个指示直接后继的指针域.由此,从某个结点出发只能顺指针往后寻查其他结点.若要寻查结点的直接前驱,则需从表头指针出发.即单链表中,NextE ...
- 线性表->链式存储->循环链表
文字描述 循环链表是另一种形式的链式存储结构.它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环.由此,从表中任一结点出发均可找到表中其他结点. 示意图 算法分析 插入.删除.查找等同单 ...
- 线性表->链式存储->线形链表(单链表)
文字描述: 为了表示前后两个数据元素的逻辑关系,对于每个数据元素,除了存储其本身的信息之外(数据域),还需存储一个指示其直接后继的信息(即直接后继的存储位置,指针域). 示意图: 算法分析: 在单链表 ...
- C语言实现链表(链式存储结构)
链表(链式存储结构)及创建 链表,别名链式存储结构或单链表,用于存储逻辑关系为 "一对一" 的数据.与顺序表不同,链表不限制数据的物理存储状态,换句话说,使用链表存储的数据元素,其 ...
- C语言 线性表 链式表结构 实现
一个单链式实现的线性表 mList (GCC编译). /** * @brief 线性表的链式实现 (单链表) * @author wid * @date 2013-10-21 * * @note 若代 ...
- 队列的链式存储方式的实现(Java语言描述)
链队列的结构示意图: 先进先出. QueueInterface.java//操作方法接口 package 队列的实现; public interface QueueInterface { public ...
- c++实验3 链式存储线性表
1.线性表链式存储结构及基本操作算法实现 (1)单链表存储结构类的定义: #include <iostream> using namespace std; template <cla ...
- 线性表的顺序存储和链式存储c语言实现
一.线性表的顺序存储 typedef int ElemType;typedef struct List { ElemType *data;//动态分配 ,需要申请空间 int length; }Lis ...
- javascript实现数据结构:线性表--线性链表(链式存储结构)
上一节中, 线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素,它的存储位置可用一个简单,直观的公式来表示.然后,另一方面来看,这个特点也造成这种存储 ...
随机推荐
- C语言语法树
- Alpha冲刺阶段集合贴
第一篇:http://www.cnblogs.com/xss6666/p/8870734.html 第二篇:http://www.cnblogs.com/xss6666/p/8893683.html ...
- ping(团队作业)
一,团队成员 何守成 031602408(队长) 黄锦峰 031602411 肖逸清 031602435 张子纯 031602441 蔡志斌 031602602 柯叶祥 031602414 二.作业链 ...
- webpack打包多html开发案例
简单说明: 1,案例没有使用devserver,所以不能实时查看 2,案例是将src下面的html.css.js分别进行处理 3,多html的规律是需要有多个entry,每个html一个entry,当 ...
- CentOS 7 U盘安装问题解决
最近期待以久的CentOS 7正式版终于发布了,在家里无聊,所以就打算在我的小Y上安装一下,由于笔记本原来有安装Windows 7 操作系统,考虑使用的需求,所以决定安装双系统: 1. ...
- 外部JS的阻塞下载
转载于:http://www.cnblogs.com/mofish/archive/2011/09/29/2195256.html 所有浏览器在下载JS的时候,会阻止一切其他活动,比如其他资源的下载, ...
- POJ3709_K-Anonymous Sequence
题意很简单,给你若干个数字,你需要减去一些数字,使得在数列中的每个数字出现的次数不少于k次. 一开始我们都会想到是用DP,于是很快我们就可以得出状态为搞定前面i个数所需要花费的最小代价用f[i]表示 ...
- 【bzoj1067】[SCOI2007]降雨量 倍增RMQ
题目描述 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小于X年.例如2002,2003,2004和200 ...
- BZOJ4881 线段游戏(二分图+树状数组/动态规划+线段树)
相当于将线段划分成两个集合使集合内线段不相交,并且可以发现线段相交等价于逆序对.也即要将原序列划分成两个单增序列.由dilworth定理,如果存在长度>=3的单减子序列,无解,可以先判掉. 这个 ...
- BZOJ3613 HEOI2014南园满地堆轻絮
不明白在某谷上是怎么标到紫的.二分答案或者发现答案就是最大逆序差的一半. #include<iostream> #include<cstdio> #include<cma ...