#include <stdio.h>
#include <string.h>
#include <malloc.h>
int count = 0;
struct Student
{
char num[15];
char name[30];
int score;
struct Student *next;
};
struct Student *Head;
struct Student *creatLink(void);
void insert(struct Student *head, int n);
void detel(struct Student *head);
void printLink(struct Student *head);
void menu()
{
int choose, n;
printf("----------------------------------------------------\n");
printf("| 菜单 |\n");
printf("| 1,输入学生成绩。 |\n");
printf("| 2,插入学生成绩。 |\n");
printf("| 3,删除学生。 |\n");
printf("| 4,打印成绩表。 |\n");
printf("| 0,退出。 |\n");
printf("----------------------------------------------------\n");
loop: scanf("%d", &choose);
switch(choose)
{
case 0: system("exit");
break;
case 1: Head = creatLink();
menu();
break;
case 2: printf("请输入在第几项插入元素:\n");
scanf("%d", &n);
insert(Head, n);
menu();
break;
case 3: detel(Head);
menu();
break;
case 4: printLink(Head);
menu();
break;
default: printf("输入错误,请从新输入!!!\n");
goto loop;
break;
}
}
struct Student *creatLink(void)
{
struct Student *head, *stu, *linkTail;
head = linkTail = NULL;
stu = (struct Student*)malloc(sizeof(Student));
printf("输入end结束:\n");
printf("学号 姓名 成绩\n");
scanf("%s", stu->num);
while( strcmp("end", stu->num) )
{
scanf(" %s %d", stu->name, &stu->score);
count++;
if( head == NULL )
{
head = stu;
}
else
{
linkTail->next = stu;
}
linkTail = stu;
stu = (struct Student *)malloc(sizeof(Student));
scanf("%s", stu->num);
}
stu->next = linkTail->next = NULL;
printf("成功创建成绩表,学生人数为:%d\n", count);
return (head);
}
void insert(struct Student *head, int n) //在链表的第n项后插入新的元素
{
struct Student *linkTail, *linkInsert;
int i = 1;
count++;
if( n > count ) n = count;
printf("请输入插入学生的信息:\n");
printf("学号 姓名 成绩\n");
linkInsert = (struct Student*)malloc(sizeof(Student));
scanf("%s %s %d", linkInsert->num, linkInsert->name, &linkInsert->score);
if( n <= 0 || Head==NULL )
{
linkInsert->next = head;
Head = linkInsert;
}
else
{
linkTail = head;
while( i < n )
{
linkTail = linkTail->next;
i++;
}
linkInsert->next = linkTail->next;
linkTail->next = linkInsert;
if( n >= count ) linkInsert->next = NULL;
}
}
void detel(struct Student *head)
{
struct Student *linkTail, *linkHead;
if( head == NULL )
{
printf("成绩表为空,无可删除学生!!!\n");
}
else
{
linkHead = linkTail = head;
count--;
printf("请输入要删除学生的学号:\n");
char num[15];
scanf("%s", num);
while( strcmp(linkTail->num, num)!=0 && linkTail->next!=NULL )
{
linkHead = linkTail;
linkTail = linkTail->next;
}
if( strcmp(linkTail->num, num)!=0 )
printf("对不起,没有查到学号为%s的学生,请检查是否输入有误。\n", num);
else printf("已成功删除学号为%s的学生信息。\n");
if( head == linkTail ) Head = linkTail->next;
else linkHead->next = linkTail->next;
}
}
void printLink(struct Student *head) //打印链表
{
struct Student *last;
last = head;
printf("成绩表为:\n");
printf("学号 姓名 成绩\n");
while( last != NULL )
{
printf("%-10s%-20s%3d\n", last->num, last->name, last->score);
last = last->next;
}
last = NULL;
}
int main()
{
menu();
return 0;
}
分享到:
相关推荐
一个完整的对链表进行生成,插入,删除,打印的操作程序,谭浩强的经典程序
链表综合操作.exe
数据结构 c语言 链表的综合操作,增删改查,倒数第k个
单向,双向链表的综合操作,包括创建链表,输出链表,节点定位,删除节点,插入节点。
集合了比较全的链表操作sdfsdfsdfsdfs
这个程序是关于数据结构的单链表的课程设计,程序中有链表的创建,删除,遍历等基本操作。
c++ 链表的综合练习 包括建立 删除 插入 显示 指针的作用
C语言设计链表的综合操作借鉴.pdf
《链表的综合操作》(1.3版本).exe
这是一个数据结构课程设计的程序!里面包含了单链表的所有操作(插入 删除 排序 打印等等)两个链表的运算(交 并 差)!
实习目的:掌握链式存储结构下线性表的建立及基本操作。 问题:建立一个采用链式存储的线性表,表中元素为学生,每个学生信息包含姓名、学号和成绩三部分,对该表实现:①输出、②查找、③插入、④删除功能,并计算...
这是我学习C语言的时候,用链表完成的学生信息管理系统,并且包含文件数据的保存和读取操作,是对理解C语言链表和文件知识的一个综合的内容
3、在掌握单链表的基本操作上进行综合题的实现。 [实验内容及要求] 1、要求用带头结点的单链表存储两个集合中的元素和最终的结果。 2、集合的元素限定为十进制数,程序应对出现重复的数据进行过滤,即使得链表中...
对链表的综合操作 功能有建立,排序,插入,删除,输出
c++链表的创建,插入和删除简单的综合,适合初学者
链表文件操作综合例题,关于学生信息的新增数据,保存数据,查看数据及退出系统
基于C语言的链表以及文件的综合应用,仅对刚入门C语言的伙伴们,如若想要了解C语言中链表和文件操作,可以根据资源文档中的网址进入到博主发布的文章中进行学习。
综合运用C语言基础知识,利用预处理、数据类型、自定义函数、结构体、链表、文件操作、WindowsAPI等,初步实现了教师与学生两种操作模式下成绩的录入、修改、删除、查询、排序、保存,以及切换登陆模式、退出等功能...
实验内容: 1.输入字符序列,建立二叉链表。 2.... 3....(最好也能实现先序,后序非递归算法) 4.... 5.... *6.将二叉链表视为森林的孩子兄弟链表,计算森林中叶子个数。...综合训练:为N个权值设计哈夫曼编码。
编写并调试一个单道处理系统的作业等待模拟程序。 作业等待算法:分别采用先来先服务(FCFS),最短作业优先(SJF)...采用链表来管理连续的内存分区,在进程随意创建和撤销的情况下,对空闲分区进程进行分配和合并。