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实现数据结构:线性表--线性链表(链式存储结构)
上一节中, 线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素,它的存储位置可用一个简单,直观的公式来表示.然后,另一方面来看,这个特点也造成这种存储 ...
随机推荐
- java结合testng,利用XML做数据源的数据驱动示例
testng的功能很强大,利用@DataProvider可以做数据驱动,数据源文件可以是EXCEL,XML,YAML,甚至可以是TXT文本.在这以XML为例: 备注:@DataProvider的返回值 ...
- hdu-题目:1058 Humble Numbes
http://acm.hdu.edu.cn/showproblem.php?pid=1058 Problem Description A number whose only prime factors ...
- MATLAB串口操作和GUI编程
程序说明 V1.0 2015/2/08 MATLAB串口操作和GUI编程 概述 本文介绍了程序AD9512_Serial_GUI的编程思路和功能.该程序设计到MATLAB的图像用户界面编程的基 ...
- SPOJ PGCD
今天做的一个很有成就感的题目,虽然经过我一个上午的痛苦挣扎,但是我觉得这个时间还是花的挺有意义的. 题目的意思是给你a和b两个数(范围是10^7),从1-a选一个数x,从1-b中间选择一个数,问你能选 ...
- 【bzoj2600】[Ioi2011]ricehub 双指针法
题目描述 给出数轴上坐标从小到大的 $R$ 个点,坐标范围在 $1\sim L$ 之间.选出一段连续的点,满足:存在一个点,使得所有选出的点到其距离和不超过 $B$ .求最多能够选出多少点. $R\l ...
- 【bzoj3573】[HNOI2014]米特运输 树形dp
题目描述 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储存一直是一个大问题.D星上有N个城市,我们将其顺序编号为1到N,1号城市为首都.这N个城 ...
- click()、bind()、live()和delegate()方法
我之前使用click()比较多,又来因为网页内容需要前端生成用了live().有的时候使用click()和bind()分不清楚该怎么试用.查了很多资料.测试了很多次,自己明白了. 总结如下:代码注释很 ...
- Golang的第一个程序-Hello, World !
安装Golang: 1. 下载安装包 https://golang.google.cn/dl/ 我这里使用压缩包,下载后解压到D盘(自定义). 2. 添加环境变量:把解压后的bin目录添加到环境变量中 ...
- Django新手图文教程-转发
转发自:http://www.cnblogs.com/Leo_wl/p/5824541.html 一.Django简介 百度百科:开放源代码的Web应用框架,由Python语言编写...... 重点: ...
- Qt 多线程同步与通信
Qt 多线程同步与通信 1 多线程同步 Qt提供了以下几个类来完成这一点:QMutex.QMutexLocker.QSemphore.QWaitCondition. 当然可能还包含QReadWrite ...