您的位置:首页 > 其它

双向链表的建立以及输出

2010-05-13 13:46 85 查看
关于双向循环链表的建立



/* 这个是一个双向链表的建立*/
#include "stdio.h"
#define NULL 0
#define N 5
#define SS sizeof(struct stu)
typedef struct stu
{ int num;
int name[10];
struct stu *llink,*rlink;/* 定义两个指针*/
}ss;
ss *list()
{ ss *h,*r,*s;
int i;
if((h=(ss *)malloc(SS))==NULL)
{ printf("wrogn !");
}
h->num=NULL; /* 首先处理这个两个指针*/
h->llink=NULL;
h->rlink=NULL;
h->name[0]='/0';/*对这个数据域也要处理*/
r=h;
for(i=0;i<N;i++)
{ s=(ss *)malloc(SS);
r->rlink=s;
printf("inter :/n");
scanf("%d%s",&s->num,&s->name);
s->llink=r; /*表明这个新建立的着s的左指针指向这个尾节点表明已经链入了尾节点部分*/
s->rlink=NULL;/* 把s的右指针置为NULL因为还用不到*/
r=s;/* 表明这个s已经成了新的链尾*/
}
h->llink=r;/* 综合处理这个双向循环链表的尾部分*/
r->rlink=h;
return h;
}

ss *input(ss *head)
{ ss *p;
p=head->rlink;/* p指向这个head的右指针所指向的数*/
if(p!=head)
do
{ printf("%2d%4s/n",p->num,p->name);
p=p->rlink;
}while(p!=head);/* 注意他的结束条件改变了。为head因为现在是一个双向循环链表,尾节点指向这个head*/
}
main()
{ ss *head;
printf("/n ht put is :/n");
head=list();
input(head);
getch();
}/* 其余的和单链表是相通的*/*****************
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: