C语言单链表

10 篇文章 0 订阅
/*main.c*/
#include "link.h"

STU* head = NULL;
#include <stdio.h>

int main(void)
{
	unsigned char choose = 0;

	while (1)
	{
		printf("*********选择功能*********\n\r\
	\r	1:打印信息\n\r	2:添加节点\n\r	3:删除所有\n\r	  其他退出\n\r");
		char ch = getchar();
		switch (ch)
		{
			case '1':fun_list(); break;
			case '2':fun_add(); break;
			case '3':fun_del(); break;
			default:return 0;
		}
		ch = getchar();						//清空其他函数输入的\n,避免被上一个ch获取到
		//fflush(stdin);
	}

	return 0;
}
/*link.c*/
#include "link.h"

void fun_input(STU*para)		//输入信息
{
	printf("请输入姓名:\n\r");
	scanf_s("%s", para->name,19);
	printf("请输入年龄:\n\r");
	scanf_s("%d", &para->edge);
	para->next = NULL;
}

void fun_add(void)				//添加节点
{
	if (head == NULL)
	{
		head = (STU*)malloc(sizeof(STU));
		fun_input(head);
	}
	else
	{
		STU* current = head;
		while (current->next != NULL)
			current = current->next;
		STU*free_ptr = (STU*)malloc(sizeof(STU));
		fun_input(free_ptr);
		current->next = free_ptr;
	}
}

void fun_list(void)		//打印节点
{
	STU* current = head;
	while (current != NULL)
	{
		printf("姓名:%s\n\r", current->name);
		printf("年龄:%d\n\r", current->edge);
		current = current->next;
	}
}

void fun_del(void)		//删除所有节点
{
	if (head == NULL)
		return;
	STU* previous = head, *current = previous->next;
	while (previous != NULL)
	{
		if (previous == head)
			head = NULL;
		free(previous);
		previous = current;
		if (previous != NULL)
			current = previous->next;
	}
}
/*link.h*/
#pragma once
#ifndef __LINIK_H__
#define __LINK_H__

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

typedef struct stu_t
{
	char name[20];
	int edge;
	struct stu_t* next;
}STU;

extern STU* head;

void fun_input(STU* para);
void fun_add(void);
void fun_del(void);
void fun_list(void);

#endif

运行结果:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值