双链表操作
2009-10-10 10:13
316 查看
#include <iotream.h> #include <malloc.h> typedef int elemtype; typedef struct linknode { elemtype data; struct linknode *left,*right; } dnodetype; dnodetype *create()//建立一个双链表 { elemtype d; dnodetype *h=NULL,*s,*t; int i=1; cout<<"建立一个单链表"<<endl; while(1); { cout<<"输入第"<<i<<"个节点的data域值:"; cin>>d; if(d==0) break; if(i==0) { h=(dnodetype *)malloc(sizeof(dnodetype)); h->data=d; h->left=NULL; h->right=NULL; t=h; } else { s=(dnodetype *)malloc(sizeof(dnodetype)); s->data=d; s->right=NULL; s->left=t; t->right=s; t=s; } i++; } return h; } void disp(dnodetype *h)//打印出双链表 { dnodetype *p=h; cout<<"输出一个双链表"<<endl<<" "; if(p==NULL) cout<<"空表"<<endl; while(p!=NULL) { cout<<p->data<<"->"; p=p->right; } cout<<endl; } int len(dnodetype *h)//返回双链表的长度 { int i=0; dnodetype *p=h; if(p==NULL) return 0; while(p!=NULL) { p=p->right; i++; } return i; } dnodetype *find(dnodetype *h,int i)//返回第i个节点的指针 { dnodetype *p=h; int j=1; if(i<=0||i>len(h)) return NULL; else { while(p!=NULL&&j<i) { j++; p=p->right; } return p; } } dnodetype *ins(dnotype *h,int i,elemtype x)//在指定位置插入节点 { dnodetype *p, *s; s=(dnodetype *)malloc(sizeof(elemtype)); s->data=x; s->left=NULL; s->right=NULL; if(i==0) { s->right=h; h->left=s; h=s; } else { p=find(h,i); if(p!=NULL&&p->right!=NULL) { s->right=p->right; p->right->left=s; p->right=s; s->left=p; } else if(p!=NULL&&p->right==NULL) { s->left=p; p->right=s; } else { cout<<"输入i值不正确。"<<endl; } } return h; } dnodetype *del(dnodetype *h,int i)//删除一个指定的节点 { dnodetype *p=h; int j=1; if(i==1) { h=h->right; h->left=NULL; free(p); } else { p=find(h,i); if(p!=NULL&&p->right!=NULL) { p->left->right=p->right; p->right->left=p->left; free(p); } else if(p!=NULL&&p->right==NULL)//P是最后一个节点 { p->left->right=NULL; free(p); } else cout<<"输入的i值不正确."<<endl; } return h; } void dispose(dnodetype *h)//释放双链表所有节点的占用空间 { dnodetype *pa=h,*pb; if(pa!=NULL) { pb=pa->right; if(pb==NULL) free(pa); else { while(pb!=NULL) { free(pa); pa=pb; pb=pb->right; } free(pa); } } }
相关文章推荐
- 数据结构 【实验3 链表基本操作】
- Java链表(基本操作)
- 单向链表的操作:创建,删除,插入,销毁,查找
- 一步一步学习数据结构(3)-链表及其操作实战
- Java数据结构---链表常用操作(I)
- 链表操作:创建,插入,删除,查找等功能
- 单链表的插入删除操作(c++实现)
- 搜集整理链表的简单操作
- 冒泡排序、二分查找、单向链表操作
- 双链表、循环链表的算法操作
- java 操作双向链表
- C++实现链表操作
- 链表操作
- 对链表的相关操作及数据结构的再理解
- 图的基本操作——邻接链表表示(网(边带权值的图)的编程没有给出,与一般的图类似)
- SPLAY树各种操作--链表
- C语言 链表的简单操作
- 对链表的操作(数据结构线性表算法设计练习)
- 对于带头结点的单链表的相关操作
- 数据结构——链表的基本操作