C语言代码实现
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
typedef struct dlnode
{
char data;
struct dlnode *prior,*next;
}DLNode;
DLNode *CreatLinkList()
{
char x;
DLNode *head,*s;
head=(DLNode *)malloc(sizeof(DLNode));
head->prior=head;
head->next=head;
printf("Input any char string:\n");
scanf("%c",&x);
while(x!='\n')
{
s=(DLNode *)malloc(sizeof(DLNode));
s->data=x;
s->prior=head;
s->next=head->next;
head->next->prior=s;
head->next=s;
scanf("%c",&x);
}
return head;
}
DLNode *Get_DLinkList(DLNode *head,int i)
{
DLNode *p=head;
int j=0;
while(p->next!=head&&j<i)
{
p=p->next;
j++;
}
if(p->next!=head)
return p;
else
return NULL;
}
void Insert_DLinkList(DLNode *head,int i,char x)
{
DLNode *p,*s;
p=Get_DLinkList(head,i-1);
if(p==NULL)
printf("Error !\n");
else
{
s=(DLNode *)malloc(sizeof(DLNode));
s->data=x;
s->prior=p;
s->next=p->next;
p->next->prior=s;
p->next=s;
}
}
void Del_DLinkList(DLNode *head,int i)
{
DLNode *p;
p=Get_DLinkList(head,i-1);
if(p==NULL)
printf("第i-1个结点不存在!\n");
else
if(p->next==NULL)
printf("第i个结点不存在!\n");
else
{
p->prior->next=p->next;
p->next->prior=p->prior;
free(p);
}
}
int print(DLNode *h)
{
DLNode *p;
p=h->next;
while(p!=h)
{
printf("%c",p->data);
p=p->next;
}
printf("\n");
}
int print1(DLNode *h)
{
DLNode *p;
p=h->prior;
while(p!=h)
{
printf("%c",p->data);
p=p->prior;
}
printf("\n");
}
int main()
{
DLNode *p,*h;
char x;
int i;
h=CreatLinkList();
print(h);
print1(h);
scanf("%d",&i);
p=Get_DLinkList(h,i);
if(p!=NULL)
printf("Element is %c\n",p->data);
else
printf("Search fail!\n");
scanf("%d,%c",&i,&x);
Insert_DLinkList(h,i,x);
print(h);
printf("Delete a element,Input site of element:\n");
scanf("%d",&i);
Del_DLinkList(h,i);
print(h);
}