双向链表和循环双向链表的基本操作
#include<stdio.h>
#include<malloc.h>
typedef struct LNode
{
int data;
struct LNode *prior;
struct LNode *next;
}LNode,*LinkList;
LinkList CreateList(LinkList L,int n)
{
LinkList p,r;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
L->prior=NULL;
r=L;
for(int i=0;i<n;i++)
{
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&(p->data));
r->next=p;
p->prior=r;
p->next=NULL;
r=p;
}
return L;
}
void ShowList(LinkList L,int n)
{
LinkList p;
int i=0;
p=L->next;
while(p&&i<n)
{
printf("%d ",p->data);
p=p->next;
i++;
}
}
int Length(LinkList L)
{
LinkList p;
int l=0;
p=L->next;
while(p)
{
p=p->next;
l++;
}
return l;
}
LinkList InsertList(LinkList L,int i,int e)
{
LinkList p,s;
int j=0;
p=L;
while(p&&j<i)
{
p=p->next;
j++;
}
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->prior=p->prior;
p->prior->next=s;
s->next=p;
p->prior=s;
return L;
}
LinkList DeleteList(LinkList L,int i)
{
LinkList p;
int j=0;
p=L;
while(p&&j<i)
{
p=p->next;
j++;
}
p->prior->next=p->next;
p->next->prior=p->prior;
free(p);
return L;
}
int main()
{
LinkList La;
LinkList pa;
int n,len;
printf("input the length of list a:");
scanf("%d",&n);
pa=CreateList(La,n);
len=Length(pa);
printf("\n");
printf("the list length is %d \n",Length(pa));
ShowList(pa,len);
pa=InsertList(pa,3,9);
len=Length(pa);
printf("链表La的3个位置插入值为9\n");
printf("the inserted list length is %d \n",Length(pa));
ShowList(pa,len);
pa=DeleteList(pa,3);
len=Length(pa);
printf("删除链表第三个位置元素:\n");
printf("the delete list length is %d \n",Length(pa));
ShowList(pa,len);
}