#include<stdio.h>
#include<stdlib.h>
typedef struct plink
{
int data;
struct plink * prev;
struct plink * next;
}PlinkNode, * PlinkList;
PlinkList Tail_Plinklist(int e);
PlinkList Heard_Plinklist(int e);
void Insert_Plinklist(PlinkList H,int pos,int e);
int Delete_Plinklist(PlinkList H,int pos);
void Print_Plinklist(PlinkList PL);
int GetElem_Plinklist(PlinkList PL,int pos);
PlinkList Tail_Plinklist(int e)
{
PlinkList H = (PlinkList)malloc(sizeof(PlinkNode));
PlinkList q;
int d;
q = H;
q->next = H;
q->prev = H;
for(int i = 0;i < e;i++)
{
scanf("%d",&d);
PlinkList p = (PlinkList)malloc(sizeof(PlinkNode));
p->data = d;
p->next = q->next;
q->next->prev = p;
q->next = p;
p->prev = q;
q = q->next;
}
return H;
}
PlinkList Heard_Plinklist(int e)
{
PlinkList H = (PlinkList)malloc(sizeof(PlinkNode));
PlinkList q;
int d;
H->next = H;
H->prev = H;
if(e >= 1)
{
scanf("%d",&d);
q = (PlinkList) malloc (sizeof(PlinkNode));
q->data = d;
q->next = H->next;
H->next = q;
q->prev = H;
H->prev = q;
}
for (int i = 0; i < e-1; i++)
{
scanf("%d",&d);
q = (PlinkList) malloc (sizeof(PlinkNode));
q->data = d;
q->next = H->next;
H->next = q;
q->prev = H;
}
return H;
}
void Insert_Plinklist(PlinkList H,int pos,int e)
{
PlinkList L,p;
L = H;
p = (PlinkList)malloc(sizeof(PlinkNode));
p->data = e;
for (int i = 1; i < pos; i++)
{
L = L->next;
}
p->next = L->next;
L->next->prev = p;
L->next = p;
p->prev = L;
}
int Delete_Plinklist(PlinkList H,int pos)
{
PlinkList L,p;
int d;
L = H;
for (int i = 1; i < pos; i++)
{
L = L->next;
}
p = L->next;
L->next = p->next;
p->next->prev = L;
d = p->data;
p->next = NULL;
p->prev = NULL;
free(p);
return d;
}
int GetElem_Plinklist(PlinkList PL,int pos)
{
PlinkList L;
int d = 0;
L = PL;
for (int i = 0; i < pos; i++)
{
L = L->next;
}
d = L->data;
return d;
}
void Print_Plinklist(PlinkList PL)
{
PlinkList q = PL->next;
while (q != PL)
{
printf("%d ",q->data);
q = q->next;
}
printf("\n");
}
int main()
{
PlinkList L;
L = Heard_Plinklist(5);
Insert_Plinklist(L,3,99);
Print_Plinklist(L);
int num = Delete_Plinklist(L,2);
Print_Plinklist(L);
int n = GetElem_Plinklist(L,4);
printf("%d",n);
system("pause");
return 0;
}
数据结构:循环双向链表
于 2023-10-25 12:18:51 首次发布