一、打开VC6.0 , 建立一个C文件。
二、引用头文件
#include <stdio.h>
#include <malloc.h>
三、声明struct node结构体:
typedef struct node
{
char name[20];
struct node *prior,*next;
}stud;
四、定义creat函数,产生链表,并返回头地址:
stud *creat(int n)
{
stud *p, *h, *s;
int i;
h = (stud*)malloc(sizeof(stud));
h->name[0]='\0';
h->prior = NULL;//上个节点空
h->next = NULL;//下个节点空
p = h;//存储该头节点
for(i=0;i<n;i++)
{
s = (stud*)malloc(sizeof(stud));
p->next=s;//开辟新节点,p下个节点链接
printf("输入第%d个学生的姓名:",i+1);
scanf("%s",s->name);//输入姓名
s->prior = p;//s上个节点是p
s->next = NULL;//下个节点暂时为空
p=s;//更新p的内存地址,即p存储区存储新地址,指向新节点
}
p->next = NULL;
return (h);
}
五、定义search函数,查找一个链表里面的某个名字的节点。
stud *search(stud *h, char *x)
{
stud *p;
char *y;
p=h->next;
while(p)
{
y=p->name;
if(strcmp(y,x)==0)
return (p);
else
p=p->next;
}
printf("没有找到数据!\n");
}
六、自定义del()函数,实现删除链表中的某个节点。
void del(stud *p)
{
p->next->prior = p->prior;
p->prior->next = p->next;
free(p);
}
七、定义main函数,执行上述代码,查看效果:
void main()
{
int number;
char sname[20];
stud *head, *sp;
printf("请输入链表的大小:");
scanf("%d",&number);
head = creat(number);
sp = head->next;
printf("\n现在这个双链表是:\n");
while(sp)
{
printf("%s",&*(sp->name));
sp = sp->next;
}
printf("\n请输入要查找的姓名:\n");
scanf("%s",sname);
sp = search(head,sname);
printf("你想查找的姓名是:%s\n", *&sp->name);
del(sp);
sp =head->next;
printf("\n现在这个双链表是\n");
while(sp)
{
printf("%s", &*(sp->name));
sp = sp->next;
}
printf("\n");
}