数据结构c语言双向循环链表
双向循环链表在定义上类似于循环单链表,就多了个前指针,以方便于向前查找。在双向链表中需要同时修改两个方向的指针,是单向链表指针的两倍。
完整代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct DuLNode
{
int data;//结点的数据域
struct DuLNode *prior;//结点的后指针域
struct DuLNode *next;//结点的前指针域
}DuLNode,*DuLinkList;//DuLinkList为指向结构体LNode的指针类型
DuLNode* InitDuList()//初始化链表 构建一个空的线性表
{
DuLNode* L = (DuLNode*)malloc(sizeof(DuLNode));
if(L==NULL)//判断申请L结点是否为空
{
printf("ERROR!\n");
return 0;
}
L->data = NULL;//定义头结点
L->next = L;
L->prior = L;
}
void Interrupt(void)//创建一个中断函数
{
while(1)//用于检测换行符,使函数脱离scanf的连续输出
if(getchar()=='\n')
break;
}
DuLinkList CreatDuList1(DuLinkList &L)//尾插法创建链表
{
int a,b,i;
DuLNode* p = L;//导入头结点,并创建一个结点s指向头结点
printf("请输入表长: ");
scanf("%d",&a);//输入要插入的链表长度
Interrupt();//中断scanf
printf("请输入表数据: ");
for(i=0;i<a;i++)
{
scanf("%d",&b);//输入要链表数据
DuLNode* s = (DuLNode*)malloc(sizeof(DuLNode));//创建一个结点
s->data = b;
p->next = s;
s->prior = p;
s->next = L;
L->prior = s;
p = p->next;
}
Interrupt();
return 0;
}
DuLinkList CreatDuList2(DuLinkList &L)//头插法创建链表
{
int a,b,i;
DuLNode* p = L;//导入头结点,并创建一个结点s指向头结点
printf("请输入表长: "
最低0.47元/天 解锁文章
942

被折叠的 条评论
为什么被折叠?



