您的位置:首页 > 其它

双链表操作

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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  null include struct