博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线性表链式存储的基本操作
阅读量:5095 次
发布时间:2019-06-13

本文共 2608 字,大约阅读时间需要 8 分钟。

  线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任意元素。线性表链式存储结构特点是用一组任意的存储单元存储数据元素,为了表示每个数据元素ai与其直接后继数据元素ai+1之间的逻辑关系,对数据元素ai来说,除了存储本身信息外,还要存储指示其直接后继的信息(即直接后继的存储位置)。这两部分信息称为数据元素ai的存储映像,称为结点(node)。它包括两个域,其中存储数据信息的称为数据域,存储直接后继存储位置的域称为指针域。

1、线性表的单链表存储结构

typedef struct Node{    //节点类型定义     ElemType data;      //数据域     struct Node *next;  //指针域 }Node,*LinkList; //LinkList为结构指针类型LintList L;      //为单链表的头指针,也称为单链表L

假设L是LinkList型变量,则L是单链表的头指针,它指向表中第一个节点,若L为空(L=NULL),则所表示的线性表为空表,其长度n为0,有时我们在单链表的第一个结点前附设一个结点,称为“头结点”,头结点的数据域可以不存储任何信息,头结点的指针域指向第一个结点的指针(即第一个元素结点的存储位置)。

2、初始化单链表

//单链表的初始化Status ListInit_L(LinkList &L){
//构造一个空的单链表L L = (LinkList)malloc(sizeof(Node)); //产生一个头节点,并使L指向此头节点 if(!L) exit(OVERFLOW); //初始化失败 L->next = NULL; //指针域为空 return OK; }

3、单链表的销毁

//销毁单链表Status ListDelete_L(LinkList &L){
//前提条件:单链表已经存在 LinkList q; if(L){ q=L->next;//指向第一个节点 free(L);//释放L L=q; } retun OK;}

4、清空单链表

//单链表的清空Status ListClear_L(LinkList &L){
//前提条件,L存在,将L置为空表 LinkList p,q; p=L->next; while(p){ q=p->next; free(p); p=q; } L->next=NULL;//头节点指针域为空 return 0; }

5、判断单链表是否为空

//判断单链表是否为空Status ListEmpty_L(LinkList &L){    //初始条件:线性表L已存在    //操作结果:若L为空表,则返回TRUE,否则返回FALSE    if(L->next)//非空        return true;    else        return false; }

6、计算单链表的长度

//计算单链表的长度int ListLength_L(LinkList &L){    //初始条件:线性表L已存在    //操作结果:返回L中数据元素个数    int i=0;    LinkList p = L->next;    //指向第一个节点     while(p){
//p没到表尾 i++; p=p->next; } return i; }

 7、取元素

//取单链表中的数据元素Status ListGet_L(LinkList &L,int i,ElemType &e){    //初始条件:L为带头结点的单链表的头指针    //操作结果:当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR    int j=1;//计数器    LinkList p=L->next;//指向第一个节点    while(p || j
next; j++; } if(!p || j>i)//第i个元素不存在 return ERROR; e = p->data;//取出第i个元素 return OK; }

8、插入

//单链表的插入操作Status ListInsert_L(LinkList &L, int i, ElemType e){    //在带头结点的单链表L中的第i个位置之前插入元素e    LinkList p=L;    int j=0;    while(p && j
next; j++; } if(!p || j>i-1) return ERROR; s = (LinkList)malloc(sizeof(Node));//创建一个新的结点s s->data=e; s->next=p->next; p->next=s; return OK; }

9、删除

//删除Status ListDelete_L(LinkList &L, int i, ElemType &e){    //在带头结点的单链表L中,删除第i个元素,并由e返回其值    LinkList p=L;//指向第一个节点    LinkList q;    int j = 0;//计数器    while(p && j
next; j++; } while(!p || j>i-1) return ERROR; q = p->next; p->next = q->next; e = q->data; free(p); return OK; }

 

转载于:https://www.cnblogs.com/geziyu/p/9691223.html

你可能感兴趣的文章
TestNG入门
查看>>
【ul开发攻略】HTML5/CSS3菜单代码 阴影+发光+圆角
查看>>
IOS-图片操作集合
查看>>
IO—》Properties类&序列化流与反序列化流
查看>>
jquery实现限制textarea输入字数
查看>>
Codeforces 719B Anatoly and Cockroaches
查看>>
ActiveMQ与spring整合
查看>>
第一阶段冲刺06
查看>>
EOS生产区块:解析插件producer_plugin
查看>>
排球积分程序(三)——模型类的设计
查看>>
HDU 4635 Strongly connected
查看>>
格式化输出数字和时间
查看>>
页面中公用的全选按钮,单选按钮组件的编写
查看>>
java笔记--用ThreadLocal管理线程,Callable<V>接口实现有返回值的线程
查看>>
(旧笔记搬家)struts.xml中单独页面跳转的配置
查看>>
不定期周末福利:数据结构与算法学习书单
查看>>
strlen函数
查看>>
关于TFS2010使用常见问题
查看>>
URL编码与解码
查看>>
Eclipse 安装SVN插件
查看>>