C语言:单链表的创建,打印及销毁

#include <stdio.h>
#include <stdlib.h>

#define MAX 10

struct List
{
	int number;
	char name[MAX];
	struct List *next;
};

typedef struct List Node;
typedef Node *Link;


/*********************
 *	释放链表
 ********************/
void free_list(Link head)
{
	Link pointer;
	
	while(head != NULL)
	{
		pointer = head;
		head = head->next;
		free(pointer);
	}
}



/*********************
 *	输出链表
 ********************/
void print_list(Link head)
{
	Link pointer;  //节点声明
	pointer = head;   //将pointer节点设为首节点
	
	while(pointer != NULL)
	{
		printf("Data number = %d\n", pointer->number);
		printf("Data name = %s\n", pointer->name);
		pointer = pointer->next;
	}
}


/*********************
 *	建立链表
*********************/
Link create_list(Link head)
{
	int datanum;
	char dataname[MAX];
	Link new;
	Link pointer;
	int i;
	
	head = (Link)malloc(sizeof(Node));
	
	if(head == NULL)
	{
		printf("memory allocate failure!\n");
	}
	else
	{
		datanum = 1;
		printf("please input the dataname: ");
		scanf("%s", dataname);
		head->number = datanum;  //定义首节点数据
		
		for(i = 0; i < MAX; ++i)
		{
			head->name[i] = dataname[i];
		}
		head->next = NULL;
		
		pointer = head;     //pointer 指针为首节点
		
		while(1)
		{
			datanum++;
			
			new = (Link)malloc(sizeof(Node));
			printf("please input the dataname: ");
			scanf("%s", dataname);
			
			if(dataname[0] == '0')   //输入0则结束
				break;
				
			new->number = datanum;
			
			for(i = 0; i < MAX; ++i)
			{
				new->name[i] = dataname[i];
			}
			new->next = NULL;
			
			pointer->next = new;    //将新节点串联在链表尾端
			pointer = new;   //链表尾端节点为新节点
		}
	}
	
	return head;
}


int main()
{
	Link head;		//声明节点
	
	head = create_list(head);
	
	if(head != NULL)
	{
		print_list(head);
		free_list(head);
	}
	
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值