提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
一、填充函数ShowList实现将单链表的所有元素输出出来。
二、填充函数ListLength实现单链表的求表长操作,返回链表的表长。
三、主函数:
1) 建立单链表。建立一个包括头结点和4个结点的(5,4,2,1)的单链表,实现单链表建立的基本操作。
2)将该单链表的所有元素显示出来。
3)取值。在已建好的单链表中的第3个位置(i=3)取出元素的值并输出。
4)查找。在链表中找等于2和等于100的元素,并显示相关信息。
5) 插入元素。在已建好的单链表中的指定位置(i=3)插入一个结点3,实现单链表插入的基本操作,并将该单链表的所有元素显示出来。
6) 删除元素。在一个包括头结点的单链表的指定位置(如i=2)删除一个结点,实现单链表删除的基本操作,并将该单链表的所有元素显示出来。
7)输出该单链表的表长。
8)取最大值。设计一个算法,通过一趟遍历确定长度为n的单链表中值最大的结点。
- typedef struct LNode {
- ElemType data; //结点的数据域
- struct LNode *next; //结点的指针域
- } L
-
- Status InitList(LinkList &L) { //算法2.6 单链表的初始化
- //构造一个空的单链表L
- L = new LNode; //生成新结点作为头结点,用头指针L指向头结点
- L->next = NULL; //头结点的指针域置空
- return OK;
- }
-
- Status GetElem(LinkList L, int i, ElemType &e) { //算法2.7 单链表的取值
- //在带头结点的单链表L中查找第i个元素
- //用e返回L中第i个数据元素的值
- int j;
- LinkList p;
- p=L->next;j=1;
- while(p&&j
- {
- p=p->next;
- ++j;
- }
- if(!p||j>i)return ERROR;
- e=p->data;
- cout<
- return OK;
- //TODO
- } //GetElem
四、单链表的查找
-
- LNode *LocateElem(LinkList L, ElemType e) { //算法2.8 按值查找
- //在带头结点的单链表L中查找值为e的元素
- //TODO
- LinkList p;
- //LinkList p;
- p=L->next;
- int i=0;
- while(p&&p->data!=e)
- {
- p=p->next;
- i++;
- }
- return p;
- } //LocateElem
五、单链表的插入
-
- Status ListInsert(LinkList &L, int i, ElemType e) { //算法2.9 单链表的插入
- //在带头结点的单链表L中第i个位置插入值为e的新结点
- int j;
- LinkList p, s;
-
- p=L;j=0;
- while(p&&(j-1))
- {
- p=p->next;++j;
- }
- if(!p||j>i-1)return ERROR;
- s=new LNode;
- s->data=e;
- s->next=p->next;
- p->next=s;
- return OK;
- //TODO
- } //ListInsert
六、单链表的删除
-
- Status ListDelete(LinkList &L, int i) { //算法2.9 单链表的删除
- //在带头结点的单链表L中,删除第i个位置
- LinkList p, q;
- int j;
- p = L;
- j = 0;
- while((p->next)&&(j-1))
- {
- p=p->next;++j;
- }
- if(!(p->next)||(j>i-1))return ERROR;
- q=p->next;
- p->next=q->next;
- delete q;
- return OK;
-
- //TODO
- } //ListDelete
七、单链表的输入数据
-
- void CreateList_H(LinkList &L, int n) { //算法2.11 前插法创建单链表
- //逆位序输入n个元素的值,建立到头结点的单链表L(单链表的输入)
- LinkList p;
- L=new LNode;
- L->next=NULL;
- cout<<"请输入数据(以空格隔开):"<
- for(int i=0;i
- {
- p=new LNode;
- cin>>p->data;
- p->next=L->next;L->next=p;
- }
- //TODO
-
- } //CreateList_H
-
- void CreateList_R(LinkList &L, int n) { //算法2.12 后插法创建单链表
- //正位序输入n个元素的值,建立带表头结点的单链表L(单链表的输入)
- //TO DO
- LinkList p,r;
- int i;
- L=new LNode;
- L->next=NULL;
- r=L;
- cout<<"请输入数据(以空格隔开):"<
- for(i=0;i
- {
- p=new LNode;
- cin>>p->data;
- p->next=NULL;r->next=p;
- r=p;
- }
-
-
- } //CreateList_R
八、单链表输出所数据
- void ShowList(LinkList L)
- {//将该单链表的所有元素显示出来
- LinkList p;
- p=L->next;
- while(p->next!=NULL)
- {
- cout<
data<<" "; - p=p->next;
- }
- cout<
data< -
- }
九、输出单链表的表长
- int ListLength(LinkList L)
- {//实现单链表的求表长操作
- //TODO
- LinkList p;
- int ListLength=1;
- p=L->next;
- while(p->next!=NULL)
- {
- ListLength++;
- p=p->next;
- }
- cout<
- }
十、输出最大值
- int Max(LinkList L)//求最大值
- {
- LinkList p,max;
- p=L->next;
- max=p;
- while(p!=NULL)
- {
- if(p->data>max->data)
- max=p;
- p=p->next;
- }
- return max->data;
- }
全部代码:
- #include
- #include
- #include
- #include
- using namespace std;
-
- #define OK 1
- #define ERROR 0
- #define OVERFLOW -2
- typedef int Status; //Status 是函数返回值类型,其值是函数结果状态代码。
- typedef int ElemType; //ElemType 为可定义的数据类型,此设为int类型
-
-
- typedef struct LNode {
- ElemType data; //结点的数据域
- struct LNode *next; //结点的指针域
- } LNode, *LinkList; //LinkList为指向结构体LNode的指针类型
-
-
-
- Status InitList(LinkList &L) { //算法2.6 单链表的初始化
- //构造一个空的单链表L
- L = new LNode; //生成新结点作为头结点,用头指针L指向头结点
- L->next = NULL; //头结点的指针域置空
- return OK;
- }
-
- Status GetElem(LinkList L, int i, ElemType &e) { //算法2.7 单链表的取值
- //在带头结点的单链表L中查找第i个元素
- //用e返回L中第i个数据元素的值
- int j;
- LinkList p;
- p=L->next;j=1;
- while(p&&j
- {
- p=p->next;
- ++j;
- }
- if(!p||j>i)return ERROR;
- e=p->data;
- cout<
- return OK;
- //TODO
- } //GetElem
-
- LNode *LocateElem(LinkList L, ElemType e) { //算法2.8 按值查找
- //在带头结点的单链表L中查找值为e的元素
- //TODO
- LinkList p;
- //LinkList p;
- p=L->next;
- int i=0;
- while(p&&p->data!=e)
- {
- p=p->next;
- i++;
- }
- return p;
- } //LocateElem
-
- Status ListInsert(LinkList &L, int i, ElemType e) { //算法2.9 单链表的插入
- //在带头结点的单链表L中第i个位置插入值为e的新结点
- int j;
- LinkList p, s;
-
- p=L;j=0;
- while(p&&(j-1))
- {
- p=p->next;++j;
- }
- if(!p||j>i-1)return ERROR;
- s=new LNode;
- s->data=e;
- s->next=p->next;
- p->next=s;
- return OK;
- //TODO
- } //ListInsert
-
- Status ListDelete(LinkList &L, int i) { //算法2.9 单链表的删除
- //在带头结点的单链表L中,删除第i个位置
- LinkList p, q;
- int j;
- p = L;
- j = 0;
- while((p->next)&&(j-1))
- {
- p=p->next;++j;
- }
- if(!(p->next)||(j>i-1))return ERROR;
- q=p->next;
- p->next=q->next;
- delete q;
- return OK;
-
- //TODO
- } //ListDelete
-
- void CreateList_H(LinkList &L, int n) { //算法2.11 前插法创建单链表
- //逆位序输入n个元素的值,建立到头结点的单链表L(单链表的输入)
- LinkList p;
- L=new LNode;
- L->next=NULL;
- cout<<"请输入数据(以空格隔开):"<
- for(int i=0;i
- {
- p=new LNode;
- cin>>p->data;
- p->next=L->next;L->next=p;
- }
- //TODO
-
- } //CreateList_H
-
- void CreateList_R(LinkList &L, int n) { //算法2.12 后插法创建单链表
- //正位序输入n个元素的值,建立带表头结点的单链表L(单链表的输入)
- //TO DO
- LinkList p,r;
- int i;
- L=new LNode;
- L->next=NULL;
- r=L;
- cout<<"请输入数据(以空格隔开):"<
- for(i=0;i
- {
- p=new LNode;
- cin>>p->data;
- p->next=NULL;r->next=p;
- r=p;
- }
-
-
- } //CreateList_R
-
- void ShowList(LinkList L)
- {//将该单链表的所有元素显示出来
- LinkList p;
- p=L->next;
- while(p->next!=NULL)
- {
- cout<
data<<" "; - p=p->next;
- }
- cout<
data< -
- }
-
- int ListLength(LinkList L)
- {//实现单链表的求表长操作
- //TODO
- LinkList p;
- int ListLength=1;
- p=L->next;
- while(p->next!=NULL)
- {
- ListLength++;
- p=p->next;
- }
- cout<
- }
- int paixun(LinkList L)//排序
- {
- LinkList p,r,temp,q;
- p=L->next;
- while(p != NULL) {
- q = r;
- temp = p;
- p = p->next;//指向第一个;
- if(q != NULL && q->next != NULL) {
- while(temp->data > q->next->data){
- q = q->next;
- }
- temp->next = q->next;
- q->next = temp;
-
- }
- else if(q == NULL) {
- cout<<"H is NULL\n";
- return ERROR;
- }
- else if(q->next == NULL) {
- temp->next = NULL;
- q->next = temp;
- }
- }
- return 0;
- }
- int Max(LinkList L)//求最大值
- {
- LinkList p,max;
- p=L->next;
- max=p;
- while(p!=NULL)
- {
- if(p->data>max->data)
- max=p;
- p=p->next;
- }
- return max->data;
- }
-
- int main() {
- LinkList s;
- int n,a;
- cout<<"请输入n的个数:";
- cin>>n;
- CreateList_R(s,n);
- cout<<"结果为:";
- ShowList(s);
- cout<<"取值,输出第三个的值为:";
- GetElem(s,3,a);
- cout<
- if(LocateElem(s,2)!=NULL)
- cout<<"找到数据2了,位置在"<
LocateElem(s,2)< - else
- cout<<"没有找到为2的数据" <
- if(LocateElem(s,100)!=NULL)
- cout<<"找到数据100了,位置在"<
LocateElem(s,100)< - else
- cout<<"没有找到为100的数据" <
- cout<<"在第三个位置中,插入数据3"<
- ListInsert(s,3,3);
- cout<<"结果为:";
- ShowList(s);
-
-
相关阅读:
【软考:系统集成项目管理】之 五组十域图
JavaScript 生成 16: 9 宽高比
提升媒体文字质量:常见错误及改进措施解析
深度学习崛起十年:“开挂”的OpenAI革新者
华为机试 - TLV解析Ⅰ
什么是无人机全自动飞行系统?概念、构成、作用深度解析
Kafka 基础概念及架构
Could not resolve placeholder ‘jdbc.driver‘ in string value “${jdbc.driver}“
进阶:编写符合Python风格的对象
java spring cloud 企业工程管理系统源码+二次开发+定制化服务
-
原文地址:https://blog.csdn.net/m0_65420451/article/details/126930972