接下来的一段代码将为你展示双向链表相关的增删改查:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define N 10
typedef struct node
{
char name[20];
struct node *left,*right;
}student;
student *creat(int n)
{
student *p,*h,*s;
int i;
h=(student *)malloc(sizeof(student));
h->name[0]='\0';
h->left=NULL;
h->right=NULL;
p=h;
for(i=0;i<n;i++)
{
s=(student *)malloc(sizeof(student));
p->right=s;
s->right=NULL;
s->left=p;
printf("输入第%d个人的名字",i+1);
scanf("%s",s->name);
p=s;
}
h->left=s;
p->right=h;
return(h);
}
void print(student *h,int n)
{
student *p;
p=h;
int i;
for(i=0;i<n;i++)
{
p=p->right;
printf("第%d个人名字是:",i+1);
printf("%s\n",p->name);
}
}
student *xun(student *h, int n){
int i=1;
student *p;
p=h->right;
while(p!=h){
if(i==n)
{
return(p);
}
p=p->right;
i++;
}
}
void del(student *p)
{
(p->right)->left=p->left;
(p->left)->right=p->right;
free(p);
}
void change(student *h,int n)
{
student *p;
p=h->right;
int i=1;
while(p!=h)
{
if(i==n)
{
scanf("%s",&p->name);
break;
}
i++;
p=p->right;
}
}
void insert(student *h,int n)
{
student*p,*s;
p=h->right;
int i=1;
for(i=1;i<n;i++)
{
p=p->right;
}
if(i==n)
{
s=(student *)malloc(sizeof(student));
(p->right)->left=s->right;
s->right=p->right;
p->right=s;
s->left=p;
scanf("%s",s->name);
}
}
int main()
{
int number=N;
student *head,*p;
head=creat(number);
print(head,number);
p=xun(head,5);
del(p);
change(head,3);
insert(head,6);
print(head,number);
return 0;
}