链表的学习

在数据结构中有一种结构叫做线性表,线性表是储存一个线性数据的表格,本文就简要的介绍一下线性表的构成。


一、线性表的定义
定义:由同种类型数据元素构成的有序数列的线性结构
长度、表头、表尾
List
线性表的形式有两种:一种是数组构成的表,另一种是链表。
所谓数组形成的表就是一个数组,如下定义所示

typedef struct{
ElementType Data[];
int last;
}List

  

从上面可以看出一个线性表类型要包括一组数据和数据的最末尾。
这样有一个弊端,就是在对线性表插入时需要对其后面的所有元素挪动位置。
故我们采取另一种方式,也就是链表的结构
结构如下:

typedef struct Node{
ElementType Data;
struct Node *Next;
}List;

  

二、链表基本功能实现
(1)求表的长度

void Length(List *Ptrl)
{
List *p = Ptrl;
int j =0;//记录数量
while(p)//结束符号为NULL
{
p = p->Next;
j++;
}
return j;
}

  

(2)查找
按序号查找

List *FindKth(int K,List *Ptrl)
{
List *p = Ptrl;
int i = 1;
while(p != NULL && i <K)
{
P = P->Next;
i++;
}
if(i == K)
return p;
else
return NULL; }

  

按值查找

List *Find(Element Data,List *Ptrl)
{
List *p = Ptrl;
while(p != NULL && p->Data != Data)
{
p = p->Next;
}//找不到就是NULL
return p;
}

  

(3)插入元素
在链表中某个位置插入某个元素
所以入口参数为元素内容、位置、链表。
出口参数为新的链表。

List *Insert(ElementType X,int i,List* Ptrl){
List *p,*s;//新链表和旧链表
//首先判断参数是否有效
p = FindKth(i-1,Ptrl);//获取i-1号节点
if(p == NULL)
{
printf("参数错误");
return NULL;
}
else
{
//如果在表头插入元素
if(i == 1){//重新申请一片空间
s = (List*)malloc(sizeof(List));
s->Data = X;
s->Next = Ptrl;
return Ptrl;
}
else{
s = (List*)malloc(sizeof(List));
s->Data = X;//交接工作 新节点插入
s->Next = p->Next;
p->Next = s;
return Ptrl;
}
}
}

  

(4)删除元素
List* Delete(int i, List *PtrL)
1、先找到链表的第 i-1 个结点,用p 指向;
2、再用指针s 指向要被删除的结点:P的下一个节点
3、然后修改指针,删除s 所指结点;
4、最后释放s 所指结点的空间。

List* Delete(int i, List *PtrL)
{
List *p,*s;//新旧链表
//判断数据有效性
p = FindKth(i-1,Ptrl);//获取i-1号节点
if(p == NULL)
{
printf("参数错误");
}
else{
if(i == 1){//在头部插入元素
p = p->next;
free(s);
return Ptrl;
}
else{
s = p->Next;
p->Next = s->Next;
free(s);
return Ptrl;
}
}
}

  

注意:在进行指针操作时要记住判断是否为空;

C语言小结之链表的更多相关文章

  1. C语言实现单链表-03版

    在C语言实现单链表-02版中我们只是简单的更新一下链表的组织方式: 它没有更多的更新功能,因此我们这个版本将要完成如下功能: Problem 1,搜索相关节点: 2,前插节点: 3,后追加节点: 4, ...

  2. C语言实现单链表-02版

    我们在C语言实现单链表-01版中实现的链表非常简单: 但是它对于理解单链表是非常有帮助的,至少我就是这样认为的: 简单的不能再简单的东西没那么实用,所以我们接下来要大规模的修改啦: Problem 1 ...

  3. C语言小结之结构类型

    C语言小结之结构类型 @刁钻的游戏 (1)枚举型类型enum COLOR {BLACK,RED,BLUE};//声明一种新的数据类型,其值分别为0,1,2但是用BLACK/RED/BLUE代表也可以这 ...

  4. C语言实现单链表,并完成链表常用API函数

    C语言实现单链表,并完成链表常用API函数: 1.链表增.删.改.查. 2.打印链表.反转打印.打印环形链表. 3.链表排序.链表冒泡排序.链表快速排序. 4.求链表节点个数(普通方法.递归方法). ...

  5. C语言实现通用链表初步(一)

    注意:本文讨论的是无头单向非循环链表. 假设不采用Linux内核链表的思路,怎样用C语言实现通用链表呢? 一种常用的做法是: typedef int element_t; struct node_in ...

  6. C语言实现单链表节点的删除(带头结点)

    我在之前一篇博客<C语言实现单链表节点的删除(不带头结点)>中具体实现了怎样在一个不带头结点的单链表的删除一个节点,在这一篇博客中我改成了带头结点的单链表.代码演示样例上传至 https: ...

  7. C/C++语言实现单链表(带头结点)

    彻底理解链表中为何使用二级指针或者一级指针的引用 数据结构之链表-链表实现及常用操作(C++篇) C语言实现单链表,主要功能为空链表创建,链表初始化(头插法),链表元素读取,按位置插入,(有序链表)按 ...

  8. 使用C语言描述静态链表和动态链表

    静态链表和动态链表是线性表链式存储结构的两种不同的表示方式. 静态链表的初始长度一般是固定的,在做插入和删除操作时不需要移动元素,仅需修改指针,故仍具有链式存储结构的主要优点. 动态链表是相对于静态链 ...

  9. 「C语言」单链表/双向链表的建立/遍历/插入/删除

    最近临近期末的C语言课程设计比平时练习作业一下难了不止一个档次,第一次接触到了C语言的框架开发,了解了View(界面层).Service(业务逻辑层).Persistence(持久化层)的分离和耦合, ...

随机推荐

  1. 分布式助手Zookeeper(一)

    分布式助手Zookeeper(一)博客分类: Zookeeper   Zookeeper最早是Hadoop的一个子项目,主要为Hadoop生态系统中一些列组件提供统一的分布式协作服务,在2010年10 ...

  2. 标准I/O库之临时文件

    ISO C标准I/O库提供了两个函数以帮助创建临时文件. #include <stdio.h> char *tmpnam( char *ptr ); 返回值:指向唯一路径名的指针 FILE ...

  3. The Tangled Web (Web之困)第四章 摘要

    1. HTML语法: 由Tag组成层级结构,标签视为名,而值插在当中. 关键组成符:<, >, ', ", & 2. 解析模式: 文件开头<!DOCTYPE> ...

  4. cglib源码分析(一): 缓存和KEY

    cglib是一个java 字节码的生成工具,它是对asm的进一步封装,提供了一系列class generator.研究cglib主要是因为它也提供了动态代理功能,这点和jdk的动态代理类似. 一. C ...

  5. iOS之XIB拖拽scrollView

    在使用storyboard和xib时,我们经常要用到ScrollView,还有自动布局AutoLayout,但是ScrollView和AutoLayout 结合使用,相对来说有点复杂.根据实践,我说一 ...

  6. Docker container network configuration

    http://xmodulo.com/networking-between-docker-containers.html How to set up networking between Docker ...

  7. linux下svn服务搭建

    安装svn需要依赖apr和apr-util这两个软件,所以先安装这两个软件 下载安装APR wget http://apache.fayea.com//apr/apr-1.5.2.tar.gz .ta ...

  8. SVN修改已提交版本的日志

    在工作中一直是使用svn进行项目的版本控制的,有时候由于提交匆忙,或是忘了添加Log,或是Log内容写的有错误.今日遇到此类情况,想要在查看项目的日志时添加log或是修改log内容,遇到如下错误:Re ...

  9. struts2学生信息管理系统篇章①

    最近在看java1234分享的一个Struts2的学生信息管理系统的知识.因为本身java没什么底子.所以就没有什么好的技术去解决问题.一直在百度,不懂就百度.这样子下来其实也能学到一些东西,过阵子等 ...

  10. BS开发平台,一小时搞定功能强大的统计分析页面

    BS开发平台,一小时搞定功能强大的统计分析页面,拥有强大的功能和详细的权限控制. 1.组织数据,分析需求(实际耗时大约20分钟)  2.建立需要的业务数据表(大致10分钟)3. 运行代码工具,生产需要 ...