潜江信息港

当前位置:

链表的C语言实现之循环链表及双向链表

2019/10/16 来源:潜江信息港

导读

3、删除删除某个结点,其实就是插入某个结点的逆操作。还是对于双向循环链表,要在连续的三个结点s,p,q中删除p结点,只需把s的右链域指针

3、删除

删除某个结点,其实就是插入某个结点的逆操作。还是对于双向循环链表,要在连续的三个结点s,p,q中删除p结点,只需把s的右链域指针指向q,q的左链域指针指向s,并收回p结点就完成了。

下面就是一个应用双向循环链表删除算法的例子:

#include

#include

#include

#define N 10

typedef struct node

{

char name[20];

struct node *llink,*rlink;

}stud;

stud * creat(int n)

{

stud *p,*h,*s;

int i;

if((h=(stud *)malloc(sizeof(stud)))==NULL)

{

printf("不能分配内存空间!");

exit(0);

}

h->name[0]=’\0’;

h->llink=NULL;

h->rlink=NULL;

p=h;

for(i=0;i〈n;i++)

{

if((s= (stud *) malloc(sizeof(stud)))==NULL)

{

printf("不能分配内存空间!");

exit(0);

}

p-〉rlink=s;

printf("请输入第%d个人的姓名",i+1);

scanf("%s",s->name);

s->llink=p;

s->rlink=NULL;

p=s;

}

h->llink=s;

p->rlink=h;

return(h);

}

stud * search(stud *h,char *x)

{

stud *p;

char *y;

p=h->rlink;

while(p!=h)

{

y=p->name;

if(strcmp(y,x)==0)

return(p);

else p=p->rlink;

}

printf("没有查找到该数据!");

}

void print(stud *h)

{

int n;

stud *p;

p=h->rlink;

printf("数据信息为:\n");

while(p!=h)

{

printf("%s ",&*(p->name));

p=p->rlink;

}

printf("\n");

}

void del(stud *p)

{

(p->rlink)->llink=p->llink;

(p->llink)->rlink=p->rlink;

free (p);

}

main()

{

int number;

char studname[20];

stud *head,*searchpoint;

number=N;

clrscr();

head=creat(number);

print(head);

printf("请输入你要查找的人的姓名:");

scanf("%s",studname);

searchpoint=search(head,studname);

printf("你所要查找的人的姓名是:%s\n",*&searchpoint->name);

del(searchpoint);

print(head);

} 查看本文来源

郑州治疗前列腺增生医院
临汾治疗白斑的医院
南平治疗妇科医院
吉安牛皮癣
芜湖治疗牛皮癣医院
标签

友情链接