c语言之链表双向链表

一、打开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");
	
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值