双向循环链表的建立、查找、添加、删除
#include <stdio.h>
#include <malloc.h>
typedef struct LNode{
int data;
struct LNode *next;
struct LNode *pre;
}LNode,*DLinkList;
//尾插法创建双向链表
DLinkList Create(DLinkList L,int n)
{
DLinkList p,s;
int m=0;
p=L;
p->next=L;
p->pre=L;
printf("请依次输入要插入的数据:");
for(int i=0;i<n;i++)
{
scanf("%d",&m);
s= (DLinkList) malloc (sizeof(LNode));
s->data=m;
s->next=p->next;
s->pre=p;
p->next->pre=s;
p->next=s;
p=s;
}
return L;
}
void menu()
{
printf("请输入指令:\n");
printf("输出单链表中的各元素值 1\n");
printf("在单链表中查询数据元素 2\n");
printf("在单链表中删除数据元素 3\n");
printf("在单链表中插入数据元素 4\n");
printf(" 结束程序 0\n");
printf("\n");
}
//获取双向循环链表中某一元素的值
DLinkList GetElem(DLinkList L,int n)
{
DLinkList p;
p=L->next;
int count=0;
while(p!=L)
{
count=count+1;
p=p->next;
}
if(n>count)
{
printf("输入的要查询数据的位置不对!");
return 0;
}
else
{
p=L;
for(int i=0;i<n;i++)
{
p=p->next;
}
return p;
}
}
//删除双向循环链表某一位置的元素
void DeleteElem(DLinkList L,int n)
{
DLinkList p;
p=L->next;
int count=0;
while(p!=L)
{
count=count+1;
p=p->next;
}
if(n>count)
{
printf("要删除数据的位置不对!");
}
else
{
p=L;
for(int i=0;i<n-1;i++)
{
p=p->next;
}
DLinkList t;
t=p->next;
p->next=t->next;
t->next->pre=p;
free(t);
}
#include <malloc.h>
typedef struct LNode{
int data;
struct LNode *next;
struct LNode *pre;
}LNode,*DLinkList;
//尾插法创建双向链表
DLinkList Create(DLinkList L,int n)
{
DLinkList p,s;
int m=0;
p=L;
p->next=L;
p->pre=L;
printf("请依次输入要插入的数据:");
for(int i=0;i<n;i++)
{
scanf("%d",&m);
s= (DLinkList) malloc (sizeof(LNode));
s->data=m;
s->next=p->next;
s->pre=p;
p->next->pre=s;
p->next=s;
p=s;
}
return L;
}
void menu()
{
printf("请输入指令:\n");
printf("输出单链表中的各元素值 1\n");
printf("在单链表中查询数据元素 2\n");
printf("在单链表中删除数据元素 3\n");
printf("在单链表中插入数据元素 4\n");
printf(" 结束程序 0\n");
printf("\n");
}
//获取双向循环链表中某一元素的值
DLinkList GetElem(DLinkList L,int n)
{
DLinkList p;
p=L->next;
int count=0;
while(p!=L)
{
count=count+1;
p=p->next;
}
if(n>count)
{
printf("输入的要查询数据的位置不对!");
return 0;
}
else
{
p=L;
for(int i=0;i<n;i++)
{
p=p->next;
}
return p;
}
}
//删除双向循环链表某一位置的元素
void DeleteElem(DLinkList L,int n)
{
DLinkList p;
p=L->next;
int count=0;
while(p!=L)
{
count=count+1;
p=p->next;
}
if(n>count)
{
printf("要删除数据的位置不对!");
}
else
{
p=L;
for(int i=0;i<n-1;i++)
{
p=p->next;
}
DLinkList t;
t=p->next;
p->next=t->next;
t->next->pre=p;
free(t);
}
}
//在某一个位置插入元素
DLinkList Insert(DLinkList L,int m,int e)
{
DLinkList p;
p=L->next;
int count=0;
while(p!=L)
{
count=count+1;
p=p->next;
}
if(m>count)
{
printf("要插入数据的位置不对!");
}
else
{
p=L;
for(int i=0;i<m-1;i++)
{
p=p->next;
}
DLinkList q;
q=(DLinkList) malloc (sizeof(LNode));
q->data=e;
q->next=p->next;
p->next->pre=q;
p->next=q;
q->pre=p;
return L;
}
}
void main()
{
int m,i,n,e;
printf("请输入要创建的循环链表的长度:");
DLinkList L,p;
L=(DLinkList) malloc (sizeof(LNode));
scanf("%d",&m);
L=Create(L,m);
menu();
do
{
printf("请输入你的选择:");
scanf("%d",&m);
switch(m)
{
case 1:
p=L->next;
while(p!=L)
{
printf("%d \n",p->data);
p=p->next;
}
break;
case 2:
printf("请输入要查询与元素的位置:");
scanf("%d",&n);
DLinkList t;
t=GetElem(L,n);
printf("该位置的数据为:%d",t->data);
break;
case 3:
printf("请输入要删除元素的位置:");
scanf("%d",&i);
DeleteElem(L,i);
break;
case 4:
printf("请输入要插入元素的位置:");
scanf("%d",&i);
printf("请输入要插入元素:");
scanf("%d",&e);
Insert(L,i,e);
break;
case 0:
printf("已结束程序!!!\n");
break;
default:
printf("输入错误!!!\n");
break;
}
}
while(m!=0);
}
//在某一个位置插入元素
DLinkList Insert(DLinkList L,int m,int e)
{
DLinkList p;
p=L->next;
int count=0;
while(p!=L)
{
count=count+1;
p=p->next;
}
if(m>count)
{
printf("要插入数据的位置不对!");
}
else
{
p=L;
for(int i=0;i<m-1;i++)
{
p=p->next;
}
DLinkList q;
q=(DLinkList) malloc (sizeof(LNode));
q->data=e;
q->next=p->next;
p->next->pre=q;
p->next=q;
q->pre=p;
return L;
}
}
void main()
{
int m,i,n,e;
printf("请输入要创建的循环链表的长度:");
DLinkList L,p;
L=(DLinkList) malloc (sizeof(LNode));
scanf("%d",&m);
L=Create(L,m);
menu();
do
{
printf("请输入你的选择:");
scanf("%d",&m);
switch(m)
{
case 1:
p=L->next;
while(p!=L)
{
printf("%d \n",p->data);
p=p->next;
}
break;
case 2:
printf("请输入要查询与元素的位置:");
scanf("%d",&n);
DLinkList t;
t=GetElem(L,n);
printf("该位置的数据为:%d",t->data);
break;
case 3:
printf("请输入要删除元素的位置:");
scanf("%d",&i);
DeleteElem(L,i);
break;
case 4:
printf("请输入要插入元素的位置:");
scanf("%d",&i);
printf("请输入要插入元素:");
scanf("%d",&e);
Insert(L,i,e);
break;
case 0:
printf("已结束程序!!!\n");
break;
default:
printf("输入错误!!!\n");
break;
}
}
while(m!=0);
}