数据结构--单链表

news/2024/11/24 2:11:38/

目录

1.单链表的定义:

单链表基本操作的实现:

2.单链表的初始化(构造带头结点的空表)

2.将头结点的指针域置空

3.链表是否为空:

4.单链表的销毁:

5.单链表的清空:

6.求单链表的表长:

7.   取值  取单链表第i个元素:

8按值查找 根据指定数据查找指定数据所在位置序号(地址)

9.插入操作 在第i个结点前插入元素为e的新结点

10.删除结点:删除第i个元素

11.头插法 元素插入在链表头部


表示空表:

1.无头结点 : 头指针的指针域为空

2.有头结点:  头节点的指针域为空 

1.单链表的定义:

typedef struct Lnode{int data;struct Lnode *next;}Lnode,*LinkList;

首先定义struct Londe结构体,结构体内有data ,指向该结构体的指针next

再用typedef 将该结构体命名为Lnode类型,*LinkList为指向Lnode结构体的指针类型

定义链表(头指针):LinkList L;//L即为指针

定义结点指针:Lnode *p;

单链表基本操作的实现:

2.单链表的初始化(构造带头结点的空表)

算法步骤:

1.生成新结点作头结点,用头指针L指向头结点

2.将头结点的指针域置空

int InitList(LinkList &L){L = new Lnode;L->next=NULL;return 1;}

3.链表是否为空:

空表:链表中无元素,称为空链表(头指针和头结点仍然在)

int ListEmpty(LinkList L)
{if(L->next)cout<<"空表"<<endl;return 0;
elsereturn 1;
}

4.单链表的销毁:

算法思路:从头指针开始,依次释放所有结点

int DestoryList(LinkList &L){Lnode *p;while(L){  p=L;L=L->next;delete p;}
return OK;
}

5.单链表的清空:

int ClearList(LinkList &L)

{

     Lnode *p,* q;

     p=L->next;

     q=p->next;

    delete p;

while(p!=NULL)

{

   q=p;

   q=q->next;

delete p;

}

L->next=NULL;
}

int ClearList(LinkList &L)
{Lnode *p,*q;p=L->next;while(p){q=p->next;delete p;q=p;}L->next=NULL;return ok;}

6.求单链表的表长:

算法思路:从首元结点开始,依次计数所有结点

int ListLength(LinkList L)
{   Lnode *p;p = L->next;int i=0;while(p){p=p->next;i++;} return i;
}

7.   取值  取单链表第i个元素:

算法步骤:从第一个结点顺链扫描,用指针p指向当前扫描到的结点,p初值p=L->next

j作计数器,累计当前扫描过得结点数,j初值为1

当p指向扫描到的下一结点时,计数器j加1

当j==i时,p所指的结点就是要找的第i个结点

int GetElem(LinkList L,int i,int &e)
{Lnode *p;p=L->next;int j=1; while(p&&j>i){//向后扫描,直到P指向第i个元素或p为空P=P->next;++j;}if(!p||j>i) return ERROR;e=p->data;return OK;
}

8按值查找 根据指定数据查找指定数据所在位置序号(地址)

int FindElem(LinkList L,int e){Lnode *p;p=L->next;int i=1;while(p&&p->data!=e){p=p->next;i++;}return i;if(p) return i;else return 0;
}
Lnode *LocateElem(LinkList L,int e){
//在线性表中查找值为e的数据元素
//找到,则返回L中值为e的数据元素地址,查找失败返回NULLp=p->next;while(p&&p->data!=e){p=p->next;}return p;
}

9.插入操作 在第i个结点前插入元素为e的新结点

算法步骤:1.首先找到ai-1的存储位置p

 2生成一个数据域为e的新节点s

3插入新结点:1新结点的指针域指向结点ai

                       2.结点ai-1的指针域指向新结点

int InsertElem(LinkList &L,int i,int e)
{Lnode *p,*s;L = p;int j=0;while(p!=NULL&&j<i-1) {p=p->next;++j;}if(p==NULL||j>i-1) return ERROR;s -> data = e ;s -> next = p ->next;p -> next = s;return OK;}

10.删除结点:删除第i个元素

int DeleteElem(LinkList &L,int i,int &e){Lnode *p,*q;int j=0;while(p->next&&j<i-1){p=p->next;++j;}if(!(p->next)||j>i-1)q=p->next;p->next=q->next;e=q->data;//将要删除元素用e保存,要用时可以用delete q;return OK;
}

11.头插法 元素插入在链表头部

 

int CreatList(LinkList &L,int n){L = new Lnode;L->next=NULL;//建立一个带头结点的单链表for(int i=n;i>0;--i){p = new Lnode;//生成新结点cin>>p->data;//输入插入的元素p->next=L->next;//将新结点插到表头p=L->next;//在将新结点与头结点连接}
}


http://www.ppmy.cn/news/789773.html

相关文章

最长公共子序列LCA

最长连续公共子序列 题目链接:3692. 最长连续公共子序列 - AcWing题库 /*解法:定义dp[i1][j1]为以a[i]结尾的字符串和b[j]结尾的字符串的最长连续公共子序列那么对于a[i] b[j]的时候 dp[i1][j1] dp[i][j]1否则为0 其他就是细枝末节 */ #include<iostream> #include<…

关于ios低版本在app store下载软件时由于版本低导致不能下载的解决办法

最近有人提出问题&#xff0c;说IOS7怎么在APP store中下载软件&#xff0c;好多软件都提示需要ios8及以上才可以下载&#xff0c;而App Store里下载又不会提供给你旧版本&#xff0c;难倒ios7就必须升级才能下载吗&#xff1f;对此本人在网上查了好多资料也做了好多测试&#…

苹果微信更新不了最新版本_微信最新版建议更新!还有一个功能彩蛋!

潮阳圈同城&#xff0c;招聘求职/房屋租售 &#x1f448;戳这里&#xff01; “有毒&#xff01;” “微信更新又又又又又来了&#xff01;” 这更新频率也太快了吧... 前段时间 安卓用户更新到最新版本微信 已经可以修改微信号 而苹果用户当时还不可以 粉丝一直追问苹果什么时…

苹果android怎么升级,微信系统大升级,苹果安卓手机如何升级更新为最新版微信8.0?...

原标题&#xff1a;微信系统大升级&#xff0c;苹果安卓手机如何升级更新为最新版微信8.0&#xff1f; 昨天&#xff0c;微信发布了最新版微信8.0。与以往不同的是&#xff0c;作为一款已风靡十年的社交产品&#xff0c;微信此次版本更新带来许多全新玩法和小创意。 目前苹果手…

苹果android怎么升级,微信系统升级!苹果安卓手机如何升级更新为最新版微信8.0?...

昨天&#xff0c;微信发布了最新版微信8.0。与以往不同的是&#xff0c;作为一款已风靡十年的社交产品&#xff0c;微信此次版本更新带来许多全新玩法和小创意。 目前苹果手机用户可以点击“关于微信”进行自动升级&#xff0c;安卓系统暂时还未推送最新安装包。 安卓手机 如何…

苹果微信更新不了最新版本_微信最新版来了,安卓苹果都更新,3大功能非常亮眼...

大家好我是人见人爱花见花开的奶思君。微信又双叒叕更新了&#xff0c;相信各位宝宝都非常的关心&#xff0c;这次ios和安卓的都更新了。到底更新了啥呢&#xff1f;速来围观&#xff01; iOS 7.0.18 正式版 首先来说说iOS 7.0.18 正式版&#xff0c;更新内容里面显示&#xff…

iOS微信8.0.31更新,带来7个功能

近日&#xff0c;iOS微信更新了8.0.31正式版。经过几天的深入体验&#xff0c;我发现了7个新特性。如果你还没有升级&#xff0c;我们就往下看吧。 功能一&#xff1a;优化编辑按钮 微信发图片&#xff0c;发送前可以编辑&#xff0c;底部的编辑按钮变了。新版画笔工具变成了钢…

android 8.0手机无法更新版本,微信8.0更新不了是什么情况?安卓微信更新不了新版本怎么办?...

微信8.0更新不了是什么情况&#xff1f;许多人都已经听说了微信推出了全新的8.0版本更新升级但是自己看了看手机发现还是旧版本而更新不了8.0。现在就让浏览器小编为大家说明&#xff0c;安卓微信更新不了新版本怎么办。 安卓微信8.0更新不了是什么情况?什么时候才可以更新? …