赞
踩
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
一、填充函数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<i)
- {
- p=p->next;
- ++j;
- }
- if(!p||j>i)return ERROR;
- e=p->data;
- cout<<e;
- 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<i-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<i-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<<"请输入数据(以空格隔开):"<<endl;
- for(int i=0;i<n;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<<"请输入数据(以空格隔开):"<<endl;
- for(i=0;i<n;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<<p->data<<" ";
- p=p->next;
- }
- cout<<p->data<<endl;
-
- }
- int ListLength(LinkList L)
- {//实现单链表的求表长操作
- //TODO
- LinkList p;
- int ListLength=1;
- p=L->next;
- while(p->next!=NULL)
- {
- ListLength++;
- p=p->next;
- }
- cout<<ListLength<<endl;
- }
- 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<iostream>
- #include<string>
- #include<iomanip>
- #include<fstream>
- 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<i)
- {
- p=p->next;
- ++j;
- }
- if(!p||j>i)return ERROR;
- e=p->data;
- cout<<e;
- 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<i-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<i-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<<"请输入数据(以空格隔开):"<<endl;
- for(int i=0;i<n;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<<"请输入数据(以空格隔开):"<<endl;
- for(i=0;i<n;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<<p->data<<" ";
- p=p->next;
- }
- cout<<p->data<<endl;
-
- }
-
- int ListLength(LinkList L)
- {//实现单链表的求表长操作
- //TODO
- LinkList p;
- int ListLength=1;
- p=L->next;
- while(p->next!=NULL)
- {
- ListLength++;
- p=p->next;
- }
- cout<<ListLength<<endl;
- }
- 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<<endl;
- if(LocateElem(s,2)!=NULL)
- cout<<"找到数据2了,位置在"<<cout<<LocateElem(s,2)<<endl;
- else
- cout<<"没有找到为2的数据" <<endl;
- if(LocateElem(s,100)!=NULL)
- cout<<"找到数据100了,位置在"<<cout<<LocateElem(s,100)<<endl;
- else
- cout<<"没有找到为100的数据" <<endl;
- cout<<"在第三个位置中,插入数据3"<<endl;
- ListInsert(s,3,3);
- cout<<"结果为:";
- ShowList(s);
- cout<<"删除第二个数据:"<<endl;
- ListDelete(s,2);
- cout<<"结果为:";
- ShowList(s);
- cout<<"输出单链表的长度:";
- ListLength(s);
- cout<<"该链表中,最大值为:"<<Max(s)<<endl;
- //cout<<"对单链表进行排序"<<endl;
- //paixun(s) ;
- // cout<<"结果为:";
- //ShowList(s);
- return 0;
- }

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了创建单链表,并对单链表的数据进行增、删、改、查、数据输入、打印等操作。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。