双向循环链表的创建,增删查改

来源:互联网 发布:淘宝店铺层级在哪里看 编辑:程序博客网 时间:2024/05/01 07:39
#include <iostream>using namespace std;typedef int ElemType;//定义双向循环链表的结点typedef struct DuLNode{ElemType elem;struct DuLNode *prior;struct DuLNode *next;}DuLNode,*DuLinklist;//初始化一个空链表void initlist(DuLinklist &L)  {   L=(DuLinklist)malloc(sizeof(DuLNode));   //表头附加结点   if(!L){cout<<"内存分配失败"<<endl;exit(-1);} L->next=L;   L->prior=L;                   }//创建双向循环链表DuLinklist createDuLinklist(DuLinklist &head,int n){DuLinklist p,q;ElemType a;q=head;for(int i=1;i<=n;i++){p=(DuLNode*)malloc(sizeof(DuLNode));if(!p){cout<<"内存分配失败"<<endl;exit(-1);}cin>>a;p->elem=a;q->next=p;p->prior=q;p->next=head;head->prior=p;q=p;}return head;} //计算链表长度int length(DuLinklist &head){DuLinklist q;q=head->next;int len=0;while(q!=head){len++;q=q->next;}return len;}//遍历双向循环列表void printList(DuLinklist &head){DuLinklist p;p=head->next;while(p!=head){cout<<p->elem<<endl;p=p->next;}}////删除第index个结点,这里head算第0个,因此index从1开始DuLinklist delNode(DuLinklist &head,int index){DuLinklist p,q;q=p=head->next;//int length=0;int j=1;if(index<1||index>length(head)){cout<<"输入的删除位置越界"<<endl;exit(-1);}while(j<index){q=q->next;j=j+1;}DuLinklist qpri=q->prior;DuLinklist qnext=q->next;qpri->next=qnext;qnext->prior=qpri;return(q);}//在位置index插入元素为e的结点void insertNode(DuLinklist &head,ElemType e,int index){DuLinklist p,q;q=(DuLinklist)malloc(sizeof(DuLNode));if(!q){cout<<"内存分配失败"<<endl;exit(0);}q->elem=e;p=head->next;int j=1;if(index<1||index>length(head)){cout<<"输入插入位置越界"<<endl;exit(-1);}while(j<index){p=p->next;j++;}DuLinklist pPrior=p->prior;pPrior->next=q;q->next=p;p->prior=q;q->prior=pPrior;}//向末尾添加元素evoid addElemToLast(DuLinklist &head,ElemType e){DuLinklist p,q;q=(DuLinklist)malloc(sizeof(DuLNode));if(!q){cout<<"内存分配失败"<<endl;exit(0);}q->elem=e;p=head->prior;p->next=q;q->next=head;head->prior=q;q->prior=p;}void main(){DuLinklist l;initlist(l);createDuLinklist(l,3);printList(l);DuLinklist q= delNode( l,3);cout<<q->elem<<endl;cout<<""<<endl;printList(l);insertNode(l,66,2);printList(l);addElemToLast(l,77);cout<<""<<endl;printList(l);system("pause");}

0 0
原创粉丝点击