/*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", ¶->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
运行结果: