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;
}