双向循环链表的创建,增删查改
来源:互联网 发布:淘宝店铺层级在哪里看 编辑:程序博客网 时间: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
- 双向循环链表的创建,增删查改
- 双向链表的增删改查
- 双向链表的增删改查
- 用java实现双向循环链表的增删改查
- 双向链表的增删改查操作
- 双向循环链表--增删查操作
- 双向循环链表的增删查操作
- 双向循环链表的 增 减 改 查 函数
- C语言实现双向链表,增删改查,排序
- 创建表增删改查
- 用C++实现双链表的增删查改以及双向链表的逆转
- java链表之--java双向链表的增删改查
- java链表结构(单向、双向的增删改查)
- 基于双向链表的增删改查和排序(C++实现)
- 链表的增删改查
- C链表的增删查改
- 链表的增删改查
- 链表的增删改查
- 正则表达式-Regular Expression
- web前端页面性能优化小结
- Aspose Words 把内容读到stream中时容易出现的问题,以及memorystream to string
- OC基础使用(二)
- 进化大神宝典1.0
- 双向循环链表的创建,增删查改
- Android:HttpWatch+jsoup抓包
- c#代码统计程序
- 关于plsql可以登录,sqlplus不能登录解决办法
- CVSVM 还没看太懂
- 学习实战完全笔记--JavaSE----流与文件(Streams and Files)
- 常用常忘的delegate,记一下。
- E+H恩德斯豪斯
- 状态机