带有头结点的链表基本操作与其能实现的数据结构,栈和队列_第1页
带有头结点的链表基本操作与其能实现的数据结构,栈和队列_第2页
带有头结点的链表基本操作与其能实现的数据结构,栈和队列_第3页
带有头结点的链表基本操作与其能实现的数据结构,栈和队列_第4页
带有头结点的链表基本操作与其能实现的数据结构,栈和队列_第5页
已阅读5页,还剩5页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.h#ifndefLIST_H_INCLUDED#defineLIST_H_INCLUDED本头文件均为带头结点的单链表,功能函数包括对单链表的单个结点的修改,删除等操作,包含对整个单链表整个操作单链表来实现栈,队列等数据结构*****/typedefintElemType;typedefintStatus;typedefstructLNode{ElemTypedata;structLNode*next;}LNode,*LinkList;typedefstructLStack{LinkListtop;}LStack,*PLStack;〃单链表实现栈typedefstructLQueue{LinkListFront;LinkListrear;}LQueue,*PLQueue;〃单链表实现队列//单链表操作StatusInitList_L(LinkList&L);//构造一个空的单链表StatusDestroyList_L(LinkList&L);//销毁单链表LStatusClearList_L(LinkList&L);//将单链表置为空表intListLength_L(LinkListL);//求单链表的长度LNode*Search_L(LinkListL,ElemTypee);/查找链表L第一个数据域为e的元素,若不存在则返回NULLLNode*NextElem_L(LinkListp);〃返回p结点的直接后结点的指针,若P结点是尾元素结点,则返回NULLLNode*MakeNode_L(ElemTypee);//构造e结点,返回指向该结点的指针StatusInsertAfter_L(LNode*p,LNode*q);//在p结点之后插入q结点StatusDeleteAfter_L(LNode*p,ElemType&e);//删除结点P直接结点的后继结点,用e返回结点值,若p为空或指向尾结点则操作失败voidListTraverse_L(LinkListL);//遍历单链表//基于单链表的算法voidFind_SortList_L(LinkListL);〃链表中的元素排序,查找排序voidmaopao_SortList_L(LinkListL);//链表中的元素冒泡排序voidFast_SortList_L(LinkListL);//用快速排序对链表元素排序voidInverseList(LinkListL);//单链表的重置。voidMergeList_L(LinkList&La,LinkList&Lb,LinkList&Lc);//将升序的单链表La与Lb归并为新的单链表Lc//链栈StatusInitList_Stack(LStack&S);//初始化一个链栈StatusDestroyList_Stack(LStack&S);//销毁一个链栈StatusStackEmpty_List(LStack&S);//l连栈是否为空voidClearStack_List(LStack&S);//青空链栈StatusPushStack_List(LStack&S,ElemTypee);/往主一个链栈中压入元素eStatusPopStack_List(LStack&S,ElemType&e);//连栈顶元素出栈到eStatusgetTop_StackList(LStack&S,ElemType&e);/去链栈顶元素到e//队列StatusInitList_Queue(LQueue&Q);//初始化一个循环链队voidDestroyList_Queue(LQueue&Q);〃销毁链队voidClearList_Queue(LQueue&Q);//清空链队StatusQueueEmpty_List(LQueue&Q);//对链队判空intQueueLength_List(LQueueQ);//求链队的长度StatusPushQueue_List(LQueue&Q,ElemTypee);//将元素e入队StatusPopQueue_List(LQueue&Q,ElemType&e);//队头元素出队#endif//LIST_H_INCLUDED.cpp#include"List.h"#include<iostream>#include<malloc.h>#defineerror0#defineok1usingnamespacestd;StatusInitList_L(LinkList&L)//初始化一个带头结点的链表{L=(LinkList)malloc(sizeof(LNode));if(NULL==L){coutvv"初始化失败!"vvendl;returnerror;}L->next=NULL;coutvv"初始化成功!"vvendl;returnok;}StatusDestroyList_L(LinkList&L)//销毁链表{LinkListp=L,q;while(p){q=p;p=p->next;free(q);}coutvv"销毁链表!"vvendl;returnok;}StatusClearList_L(LinkList&L)//青空链表{LinkListp=L,q;while(p->next){q=p->next;p=p->next;free(q);}coutvv"清空链表!"vvendl;returnok;}intListLength_L(LinkListL)//求表长度{LinkListp=L;intnum=0;while(p->next){p=p->next;++num;}returnnum;}LNode*Search_L(LinkListL,ElemTypee)//在表中查询是否存在元素e,并返回该元素结点{LinkListp=L->next;while(NULL!=p){if(p->data==e){coutvv"查询成功!"vvendl;returnp;}elsep=p->next;}coutvv"不存在该元素!"vvendl;returnNULL;}LNode*MakeNode_L(ElemTypee)/构造值为e的结点,返回结点指针{LinkListp;p=(LinkList)malloc(sizeof(LNode));if(NULL==p){coutvv"创建结点失败!"vvendl;returnNULL;}elsep->data=e;returnp;}StatusInsertAfter_L(LNode*p,LNode*q)//在p结点之后插入q结点{if(NULL==p||NULL==q)returnerror;q->next=p->next;p->next=q;coutvv"插入成功!"vvendl;returnok;StatusDeleteAfter_L(LNode*p,ElemType&e)/删除结点P直接结点的后继结点,用e返回结点值,若p为空或指向尾结点则操作失败{if(NULL==p){coutvv"删除结点失败!"vvendl;returnerror;}LinkListq;q=p->next;p->next=q->next;free(q);coutvv"删除成功!"vvendl;returnok;}voidListTraverse_L(LinkListL)//遍历单链表{LinkListp=L->next;while(p){coutvvp->datavv"";p=p->next;}coutvvendl;}StatusInitList_Stack(LStack&S)//初始化一个链栈{S.top=(LinkList)malloc(sizeof(LNode));if(NULL==S.top)returnerror;coutvv"Initesuccess!"vvendl;S.top->next=NULL;returnok;}StatusDestroyList_Stack(LStack&S)//销毁一个链栈{LinkListp=S.top,q;while(p){q=p;p=q->next;free(q);}returnok;}StatusStackEmpty_List(LStack&S)/链栈是否为空{if(NULL==S.top->next){coutvv"空栈!"vvendl;returnok;}elsereturnerror;}voidClearStack_List(LStack&S)//青空链栈{LinkListp=S.top->next,q;while(p){q=p;p=p->next;free(q);}}StatusPushStack_List(LStack&S,ElemTypee)/往主一个链栈中压入元素e{LinkListq;q=(LinkList)malloc(sizeof(LNode));q->data=e;q->next=S.top->next;S.top->next=q;coutvv"Pushsuccess!"vvendl;returnok;}StatusPopStack_List(LStack&S,ElemType&e)/链栈顶元素出栈到e{LinkListq=S.top->next;if(NULL==q)returnerror;e=q->data;S.top->next=q->next;free(q);returnok;}StatusgetTop_StackList(LStack&S,ElemType&e)/去链栈顶元素到e{if(NULL==S.top->next)returnerror;e=S.top->next->data;returnok;}StatusInitList_Queue(LQueue&Q)//初始化一个循环链队{Q.Front=(LinkList)malloc(sizeof(LNode));if(NULL==Q.Front)returnerror;Q.Front->next=NULL;Q.rear=Q.Front->next;cout<<"InitListQueuesuccess!"<<endl;returnok;}voidDestroyList_Queue(LQueue&Q)//销毁链队{LinkListp=Q.Front,q;while(p){q=p;p=p->next;free(q);}cout<<"DestroyListQueuesuccess!"<<endl;}voidClearList_Queue(LQueue&Q)//清空链队{LinkListp=Q.Front->next,q;while(p){q=p;p=p->next;free(q);}cout<<"clearListQueuesuccess!"<<endl;}StatusQueueEmpty_List(LQueue&Q)//对链队判空{if(Q.Front->next==Q.rear)returnok;elsereturnerror;}intQueueLength_List(LQueueQ)〃求链队的长度{intnum=0;num=ListLength_L(Q.Front);returnnum;}StatusPushQueue_List(LQueue&Q,ElemTypee)//|将元素e入队{LinkListq;q=(LinkList)malloc(sizeof(LNode));if(NULL==q)returnerror;q->data=e;q->next=NULL;if(Q.rear==NULL)Q.rear=Q.Front;Q.rear->next=q;Q.rear=q;returnok;}StatusPopQueue_List(LQueue&Q,ElemType&e)//队头元素出队{if(QueueEmpty_List(Q))returnerror;LinkListq=Q.Front->next;e=q->data;Q.Front->next=q->next;free(q);returnok;}voidmaopao_SortList_L(LinkListL)〃链表中的元素排序,冒泡排序{ElemTypee;LinkListp=L->next,temp;while(p){temp=p->next;while(temp){if(p->data>temp->data)e=p->data,p->data=temp->data,temp->data=e;temp=temp->next;p=p->next;}voidFind_SortList_L(LinkListL)〃链表中的元素排序,查找排序{LinkListp=L->next,temp,q;ElemTypee

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论