#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语言实现线性表(链式存储方式)的更多相关文章

  1. 线性表->链式存储->双向链表

    文字描述 之前的链表(单链表.循环链表)的链式存储结构中只有一个指示直接后继的指针域.由此,从某个结点出发只能顺指针往后寻查其他结点.若要寻查结点的直接前驱,则需从表头指针出发.即单链表中,NextE ...

  2. 线性表->链式存储->循环链表

    文字描述 循环链表是另一种形式的链式存储结构.它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环.由此,从表中任一结点出发均可找到表中其他结点. 示意图 算法分析 插入.删除.查找等同单 ...

  3. 线性表->链式存储->线形链表(单链表)

    文字描述: 为了表示前后两个数据元素的逻辑关系,对于每个数据元素,除了存储其本身的信息之外(数据域),还需存储一个指示其直接后继的信息(即直接后继的存储位置,指针域). 示意图: 算法分析: 在单链表 ...

  4. C语言实现链表(链式存储结构)

    链表(链式存储结构)及创建 链表,别名链式存储结构或单链表,用于存储逻辑关系为 "一对一" 的数据.与顺序表不同,链表不限制数据的物理存储状态,换句话说,使用链表存储的数据元素,其 ...

  5. C语言 线性表 链式表结构 实现

    一个单链式实现的线性表 mList (GCC编译). /** * @brief 线性表的链式实现 (单链表) * @author wid * @date 2013-10-21 * * @note 若代 ...

  6. 队列的链式存储方式的实现(Java语言描述)

    链队列的结构示意图: 先进先出. QueueInterface.java//操作方法接口 package 队列的实现; public interface QueueInterface { public ...

  7. c++实验3 链式存储线性表

    1.线性表链式存储结构及基本操作算法实现 (1)单链表存储结构类的定义: #include <iostream> using namespace std; template <cla ...

  8. 线性表的顺序存储和链式存储c语言实现

    一.线性表的顺序存储 typedef int ElemType;typedef struct List { ElemType *data;//动态分配 ,需要申请空间 int length; }Lis ...

  9. javascript实现数据结构:线性表--线性链表(链式存储结构)

    上一节中, 线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素,它的存储位置可用一个简单,直观的公式来表示.然后,另一方面来看,这个特点也造成这种存储 ...

随机推荐

  1. 【第五周】四则运算GUI

    这次这个简陋的程序终于发布了,其实发布很简单(在windows平台),因为使用的是vs2008+qt4.7的组合,在微软自家平台上用一用还是很方便的,只需要在release编译生成的exe文件,加上几 ...

  2. 爬虫学习之-xpath

    1.XPATH使用方法 使用XPATH有如下几种方法定位元素(相比CSS选择器,方法稍微多一点): a.通过绝对路径定位元素(不推荐!) WebElement ele = driver.findEle ...

  3. JS在当前页面插入<script>标签,并执行

    将<script>标签绑定到<html>上, html可换成body,header等其他存在的标签. var htmm =document.getElementsByTagNa ...

  4. idea 复制数据库查询结果,粘贴直接生成insert into 语句

    遇到一个场景,需要将数据库查询的结果导入到另外一个数据库中,给我的第一感受是,写程序,从数据库A中获取到数据,在插入到数据库B中. 但是Idea 可以直接复制查询结果,然后粘贴生成insert语句. ...

  5. idea导出包含main函数的jar

    1.首先打开File->project stucture->Artifacts 2.按照下图方式: 3.选择面main函数的所在的类,选择MAINFEST.MF问的生成路径 这里一定选择 ...

  6. 第117天:Ajax实现省市区三级联动

    Ajax实现省市区三级联动 思路: (1)首先获取省份信息 (2)发起Ajax请求,注意dataType中的T大写 (3)封装回调函数,回调函数success中用$.each循环每一条数据,动态创建o ...

  7. LBP纹理特征[转自]

    LBP方法(Local binary patterns)是一个计算机视觉中用于图像特征分类的一个方法.LBP方法在1994年首先由T. Ojala, M.Pietikäinen, 和 D. Harwo ...

  8. BZOJ4887 Tjoi2017可乐(动态规划+矩阵快速幂)

    设f[i][j]为第i天到达j号城市的方案数,转移显然,答案即为每天在每个点的方案数之和.矩乘一发即可. #include<iostream> #include<cstdio> ...

  9. XML格式化加载的时候提示Content is not allowed in prolog. Nested exception: Content is not allowed in prolog

    原因:原本是.xml文件格式的内容,被你用右键,文本编辑,保存,导致格式不认了. 解决方法:下载个notepad+ 工具,用这工具打开,修改,编辑,保存,即可被继续认作xml格式.

  10. 【POJ1741】Tree(点分治)

    [POJ1741]Tree(点分治) 题面 Vjudge 题目大意: 求树中距离小于\(K\)的点对的数量 题解 完全不觉得点分治了.. 简直\(GG\),更别说动态点分治了... 于是来复习一下. ...