当前位置:
文档之家› 双向循环链表的建立插入与删除
双向循环链表的建立插入与删除
int i;
for(i=1;i<=n;i++)
{
q=(DuLinkList)malloc(sizeof(DuLNode));
printf("您该输入第%d个元素的值了:",i);
scanf("%d",&q->data);
p->next =q;
q->prior=p;
q->next=L;
L->prior =q;
void Display( DuLinkList L)
{ DuLinkList p;
printf("双向循环链表中的结点的数据为:");
for(p=L->next ;p->next !=L;)
{
printf("%d",p->data);
printf("、");
p=p->next ;
}
printf("%d\n",p->data );
ListDelete(L,i);//结点的删除
Display(L);
printf("双向循环链表中结点的个数为:%d\n",L->Length);
}
int i;
for(i=1;i<=n;i++)
{
q=(DuLinkList)malloc(sizeof(DuLNode));
printf("其中第%d个元素的值为:",i);
scanf("%d",&q->data);
p->next =q;
q->prior=p;
q->next=L;
L->prior =q;
p=p->next ;
return p;
}
//结点的删除
status ListDelete(DuLinkList L,int i)
{
//删除带头结点的双链循环线性表L的第i个元素,i的合法值为1≤i≤表长
DuLinkList p;
if(i<1) /* i值不合法*/
return ERROR;
p=GetElemP(L,i);
if(!p)
return ERROR;
p->prior->next=p->next;
p->next->prior=p->prior;
L->Length --;
printf("删除了双线循环链表中第%d个结点,元素值为:%d\n",i,p->data);
free(p);
return OK;
}
//结点的输出
创建双向循环链表的源代码:
#include<stdio.h>
#include<stdlib.h>
#define RFLOW -2
#define ERROR 0
#define OK 1
typedef int status;
//双向循环链表的存储结构
typedef struct DuLNode
{
int data;
if(!q)
return OVERFLOW;
q->data=e;
q->prior=p->prior;
p->prior->next=q;
q->next=p;
p->prior=q;
m->Length++;
printf("您在双向循环链表第%d个位置之前插入了一结点元素:%d\n",i,e);
return OK;
{
//输入n个元素的值,建立带头结点的双线循环链表L
DuLinkList p=L,q;
int i;
for(i=1;i<=n;i++)
{
q=(DuLinkList)malloc(sizeof(DuLNode));
printf("您该输入第%d个元素的值了:",i);
scanf("%d",&q->data);
int Length;
struct DuLNode *prior;
struct DuLNode *next;
} DuLNode,*DuLinkList;
//构建一个空的双向循环链表
int InitList(DuLNode **p)
{
*p=(DuLNode *)malloc(sizeof(DuLNode));
}
//结点的输出
void Display( DuLinkList L)
{ DuLinkList p;
printf("双向循环链表中的结点的数据为:");
for(p=L->next ;p->next !=L;)
{
printf("%d",p->data);
printf("、");
p=p->next ;
}
{
*p=(DuLNode *)malloc(sizeof(DuLNode));
if(*p)
{
(*p)->next=(*p)->prior=*p;
(*p)->Length=0;
}
else
exit(OVERFLOW);
}
//双向循环链表的创建
void Create(DuLinkList &L,int n)
p=q;
L->Length ++;
}
}
//查找元素的位置
DuLinkList GetElemP(DuLinkList h,int i)
{
int j;
DuLinkList p=h;
for(j=1;j<=i;j++)
p=p->next ;
return p;
}
//结点的插入
status Listinsert(DuLNode *m,int i,int e)
p=q;
L->Length ++;
}
}
//结点的输出
void Display( DuLinkList L)
{ DuLinkList p;
printf("双向循环链表中的结点的数据为:");
for(p=L->next ;p->next !=L;)
{
printf("%d",p->data);
printf("、");
}
//主函数实现链表的创建,插入,删除等操作
int main()
{
DuLinkList L;
int n,i;
InitList(&L) ;
printf("你想创建几个循环节点就输入几就行啦,请输入:");
scanf("%d",&n);
Create(L,n);
printf("您想删除哪个结点呢?");
scanf("%d",&i);
p=p->next ;
}
printf("%d\n",p->data );
}
int main()
{
DuLinkList L;
int n,i;
InitList(&L) ;
printf("你想创建几个循环节点就输入几就行啦,请输入:");
scanf("%d",&n);
Create(L,n);
Display(L);
scanf("%d,%d",&l,&e);
Listinsert(L,l,e);
Display(L);
}
双向循环链表删除的源代码:
#include<stdio.h>
#include<stdlib.h>
#define OVERFLOW -2
#define ERROR 0
#define OK 1
typedef int status;
int Length;
struct DuLNode *prior;
struct DuLNode *next;
} DuLNode,*DuLinkList;
//构建一个空的双向循环链表
void InitList(DuLNode **p)
{
*p=(DuLNode *)malloc(sizeof(DuLNode));
if(*p)
{
(*p)->next=(*p)->prior=*p;
(*p)->Length=0;
}
else
exit(OVERFLOW);
}
//双向循环链表的创建
void Create(DuLinkList &L,int n)
{
//输入n个元素的值,建立带头结点的双线循环链表L
DuLinkList p=L,q;
//双向循环链表的存储结构
typedef struct DuLNode
{
int data;
int Length;
struct DuLNode *prior;
struct DuLNode *next;
} DuLNode,*DuLinkList;
//构建一个空的双向循环链表