数据结构——单链表的基本操作
发布日期:2021-05-15 16:33:01 浏览次数:20 分类:精选文章

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

实验目的

通过该实验,深入理解链表的逻辑结构、物理结构等概念,掌握链表基本操作的编程实现,熟练掌握C语言中指针的操作。

实验内容

编程实现链表下教材第二章定义的线性表的基本操作,最好用菜单形式对应各个操作,使其编程一个完整的小软件。

参考界面:

在这里插入图片描述

源代码

#include 
using namespace std;typedef int ElemType;typedef struct LNode{ ElemType data; struct LNode *next;}LNode,*LinkList;//链表初始化int InitList(LinkList &L){ L=new LNode; if(!L) return 0; L->next=NULL; return 1;}//销毁链表int DestoryList(LinkList &L){ LinkList p; while(L) { p=L; L=L->next; delete p; } return 1;}//清空单链表int ClearList(LinkList L){ LinkList p,q; p=L->next; while(p){ q=p;delete q;p=p->next;} L->next=NULL; return 1;}//求单链表长度int Listlength(LinkList L){ int sum=0; LinkList p=L->next; while(p) { p=p->next; sum++; } return sum;}//判断单链表是否为空bool ListEmpty(LinkList L){ if(L->next) return 1; else return 0;}//获取单链表中某个数据元素的内容int GetElem(LinkList L,int i,ElemType &e){ LinkList p=L->next; int j=1; while(p&&j
next; ++j; } if(!p||j>i)return 0; e=p->data; return 1;}//查找值为e的数据元素的位置int LocateElem(LinkList L,ElemType e){ LinkList p=L->next; int i=0; while(p&&p->data!=e) { p=p->next; i++; } if(i>=Listlength(L)) return 0; return i+1;}//求直接前驱int PriorElem(LinkList L,ElemType e,ElemType&pre_e){ LNode*p=L->next; if(e==p->data) return 0; while(p->next) { if(p->next->data==e) { pre_e=p->data; return 1; } p=p->next; } return 0;}//求直接后继int NextElem(LinkList L,ElemType e,ElemType&next_e){ LNode*p=L->next; while(p) { if(p->data==e&&p->next) { next_e=p->next->data; return 1; } p=p->next; } return 0;}//在单链表中插入数据元素int ListInsert(LinkList&L,int i,ElemType e){ LinkList p=L; int j=0; while(p&&(j
next; ++j; } if(!p||j>i-1)return 0; LinkList s=new LNode; s->data=e; s->next=p->next; p->next=s; return 1;}//删除单链表中第i个元素,返回第i个元素的值int ListDelete(LinkList &L,int i,ElemType&e){ LinkList p=L; int j=0; while((p->next)&&(j
next; ++j; } if(!(p->next)||(j>i-1)) return 0; LinkList q=p->next; e=q->data; p->next=q->next; delete q; return 1;}//输出链表元素void LinkPrint(LinkList &L){ LinkList p=L->next; while(p) { cout<
data<<" "; p=p->next; }}//前插法创建单链表void CreateList_H(LinkList &L,int n){ L=new LNode; L->next=NULL; cout<<"请输入要插入的元素:"<
>p->data; p->next=L->next; L->next=p; }}//后插法创建单链表void CreateList_R(LinkList&L,int n){ L=new LNode; L->next=NULL; LNode*r=L; for(int i=0;i
>p->data; p->next=NULL; r->next=p; r=p; }}//判断链表是否为空bool IsEmpty(LinkList L){ if(L->next) return false; else return true;}//链表逆转int ReverseList(LinkList&L){ if(L==NULL||L->next==NULL) return 0; LinkList pRev=NULL; LinkList pCur=L->next; while(pCur!=NULL) { LinkList temp=pCur; pCur=pCur->next; temp->next=pRev; pRev=temp; } L->next=pRev; return 1;}void PrintTips(){ cout<<"可执行的操作有:"<
>k) { switch(k) { case 1: s=InitList(L); if(s==1) cout<<"初始化成功或重置成功!"<
next) { cout<<"链表为空!"<
>i; if(!GetElem(L,i,e)) { cout<<"该位置超出链表范围!"<
>e; s=LocateElem(L,e); if(!s) { cout<<"不存在"<
next) { cout<<"链表为空!"<
>e; if(!PriorElem(L,e,res_e)) { cout<<"查找失败!"<
next) { cout<<"链表为空!"<
>e; if(!NextElem(L,e,res_e)) { cout<<"查找失败!"<
>i>>e; s=ListInsert(L,i,e); if(s) cout<<"插入成功!"<
>i; s=ListDelete(L,i,e); if(s) cout<<"删除成功!,该位置值为:"<
<
>s; CreateList_R(L,s); break; case 12: return 0; break; case 13: if(IsInvalid(L)) break; if(IsEmpty(L)) cout<<"链表为空!"<
上一篇:Hadoop MapReduce概述
下一篇:sublime / vscode 快捷生成HTML代码

发表评论

最新留言

不错!
[***.144.177.141]2025年04月27日 03时30分57秒