本文主要是介绍循环链表C/C++实现(数据结构严蔚敏版),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1头文件LinkList.h:
#include<iostream>
using namespace std;
#include<malloc.h>#define error 0
#define ok 1
typedef int Status;
typedef int ElemType;typedef struct LNode{ElemType data;struct LNode* prior;struct LNode* next;}LNode, *LinkList;//初始化循环链表
Status InitList(LinkList& L, int n);//销毁一个带头结点的双向循环链表,ok
Status DestroyList(LinkList &L); // 打印循环链表信息
Status Print(const LinkList& L); //查询双向链表中的第i个数据
Status Select(const LinkList& L, int i, ElemType& e);//定位第i个位置的地址,,并返回给e
Status Get(const LinkList& L, int i, LinkList& e);//在第i个位置插入信息
Status ListInsert(LinkList& L, int i, const ElemType& e); //删除第i个位置的信息
Status ListDelete(LinkList& L, int i, ElemType& e);//定位值为e的结点的位置
Status LocateElem(const LinkList& L, ElemType e);
2.源文件LinkList.cpp:
#include "LinkList.h"//初始化循环链表,正序创建节点
Status InitList(LinkList& L, int n){LinkList p, s;//中间变量 int i; L= new LNode(); p = L; cout<<"请输入"<<n<<"个数据"<<endl;for(i=0;i<n;i++) { s = new LNode(); if(!s) exit(0);cin>>s->data;p->next = s; s->prior=p; p=s; } p->next=L; L->prior=p; return ok; }//销毁双向链表
Status DestroyList(LinkList &L)//销毁一个带头结点的双向循环链表,ok
{ //p接收下一个数据地址 LinkList p = NULL; while(L) { p=L->next; delete L; L=p; } } // 打印循环链表信息
Status Print(const LinkList& L){if(L->next == L && L->prior == L){cout<<"双向链表为空"<<endl; }LinkList p = L->next;while(p != L){cout<<p->data<<" ";p = p->next;} cout<<endl;
} //查询双向链表中的第i个数据,并返回给e
Status Select(const LinkList& L, int i, ElemType& e){LinkList p = L->next;while(p != L && i > 1){i--;p = p->next;} e = p->data;return ok;
}//在第i个位置插入数据信息
Status ListInsert(LinkList& L, int i, const ElemType& e){LinkList p, s;//先获取第i个位置的地址,传给p Get(L, i, p);if(!(s = new LNode())) return error;s->data = e;s->prior = p->prior;p->prior->next = s;s->next = p;p->prior = s;return ok;} //删除第i个位置的信息
Status ListDelete(LinkList& L, int i, ElemType& e){LinkList p;Get(L, i, p);e = p->data;p->prior->next = p->next;p->next->prior = p->prior;delete p;return ok;
} //定位第i个位置的地址,,并返回给e
Status Get(const LinkList& L, int i, LinkList& s){LinkList p;p = L->next;while(p != L && i > 1){i--;p = p->next;}s = p;return ok;
} //定位数据的位置
Status LocateElem(const LinkList& L, ElemType e)
{ LinkList p = NULL; p=L->next;int i = 0;;while(p!=L) { i++;if(e == p->data) return i; p=p->next; } cout<<"数据不存在"<<endl;return error;
}
3.测试文件test.cpp
#include <iostream>
#include "LinkList.h"/* run this program using the console pauser or add your own getch, system("pause") or input loop */int main(int argc, char** argv) {LinkList L;ElemType e;int i, n;InitList(L, 3);cout<<"初始化完成"<<endl;Print(L);cout<<"请输入删除的位置"<<endl;cin>>i;ListDelete(L, i, e);Print(L);return 0;
}
这篇关于循环链表C/C++实现(数据结构严蔚敏版)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!