01-链表

一. 单链表

  1. 通过链表添加/展示信息
#include <stdio.h>
#include <stdlib.h>

/*
链表结构体:
data: 表示学生成绩
next: 学生成绩结构体指针
*/
typedef struct Node_Student
{
    int data;
    struct Node_Student* next;   //这里不能直接写Node, 虽然前面有typedef但是重新还不知道后面有定义Node. 也不能写Struct Node
}Node;

/*
初始化一个链表头节点
*/
Node* InitHead()
{
    Node* list = (Node*)malloc(sizeof(Node)); 
    list -> data = 0;
    list -> next = NULL;
    return list;
}

/*
添加链表节点
*/
void Add_List_Head(Node* list, int data)
{
    Node* node = (Node*)malloc(sizeof(Node));
    node -> data = data;
    node -> next = list -> next;
    list -> next = node;
    list -> data ++;
}

/*
展示全部节点信息
*/
void Show_List_Func(Node* list)
{
    while(list -> next)
    {
        list = list -> next;
        printf("data: %d \n", list -> data);
    }
}

/*
功能菜单
*/
void Menu_Func(Node* list)
{
	int select = 0;
	int data = 0;
	printf("**********1. 输入1添加学生成绩**********\n");
	printf("**********2. 输入2显示学生成绩**********\n");
	printf("**********3. 输入3清除屏幕信息**********\n");
	printf("**********4. 输入4退出学生系统**********\n");
	printf("请输入对应选项: ");
	scanf("%d", &select);
	printf("\n");
	switch(select)
	{
		case 1:
			printf("请输入学生成绩: ");
			scanf("%d", &data); //!!!这里如果是写data程序就会卡住, 但是不报错.
			printf("\n");
			Add_List_Head(list, data);
			break;
		case 2:
			Show_List_Func(list);
			break;
		case 3:
		     system("cls");
			break;
		case 4:
		    exit(0);
		    break;
		default:
			break;
	}
}

int main()
{
    Node* list = InitHead();
    Add_List_Head(list, 25);
    Add_List_Head(list, 89);
    
    //Show_List_Func(list);
	
	while(1){
		Menu_Func(list);
	}
    return 0;
}

posted @ 2024-01-13 22:51  烙铁666  阅读(9)  评论(0)    收藏  举报