要求:
以单链表形式创建一个学生表或图书表,并能实现相关的创建、销毁、清空、查找、插入和删除等算法。
需要定义学生表或图书表的结构体

  1. linklist.h代码:
typedef struct link_node//定义结构体,包含学生学号 语文 数学 英语成绩 
{
	int number,cgrade,mgrade,egrade;
	struct link_node *next;
}node,*linklist;

linklist createlist(int n)//创建单链表 
{
	node *p,*s;
	linklist head=(linklist)malloc(sizeof(node));
	p=head;
	for(int i=0; i<n; i++)//输入单链表中各元素的值 
    {
        s=(linklist)malloc(sizeof(node));
        printf("请输入第%d个学生的学号:\n",i);
        scanf("%d",&s->number);
        printf("请输入第%d个学生的语文,数学,英语成绩:\n",i);
        scanf("%d %d %d",&s->cgrade,&s->mgrade,&s->egrade);
        p->next=s;
        p=s;
    }
    p->next=NULL;
    head=head->next;
    return head;//返回单链表头结点 
}

void displaylist(linklist q)//顺序显示单链表全部元素的值 
{
	unsigned int i=0;
	while(q)
{
		printf("\n第%d个学生的学号为:\n",i);
		printf("%d\n",q->number);
		printf("第%d个学生的语文,数学,英语成绩为:\n",i);
		printf("%d %d %d\n",q->cgrade,q->mgrade,q->egrade);
        q=q->next;
        i++;	}
        printf("\n");
}

void findlist(linklist q,unsigned int num)//查找学生序号为num的学生的学号及成绩 
{
	unsigned int o=0;
	while(o!=num)//查找 
	{
		q=q->next;
		o++;	
	}		
		printf("\n第%d个学生的学号为:\n",num);
		printf("%d\n",q->number);
		printf("第%d个学生的语文,数学,英语成绩为:\n",num);
		printf("%d %d %d\n",q->cgrade,q->mgrade,q->egrade);
}

void deletelist(linklist q,unsigned int num)//删除序号为num的学生的所有信息 
{
	unsigned int o=0;
	while(o!=num-1)//查找 
	{
		q=q->next;
		o++;	
	}	
	q->next=q->next->next;//跳过当前结点 
}

void replacelist(linklist q,unsigned int num)//更改序号为num的学生的信息 
{
	unsigned int o=0;
	while(o!=num)//查找 
	{
		q=q->next;
		o++;	
	}
	printf("\n请重新输入学号:\n");
	scanf("%d",&q->number);	
	printf("请重新输入成绩:\n");
	scanf("%d %d %d",&q->cgrade,&q->mgrade,&q->egrade);		
}

void insertlist(linklist q,unsigned int num)//在序号为num的位置插入新的学生的信息 
{
	unsigned int o=0;
	while(o!=num-1)//查找 
	{
		q=q->next;
		o++;	
	}
	linklist n=(linklist)malloc(sizeof(node));		
	printf("\n请输入学号:\n");
	scanf("%d",&n->number) ;
	printf("请输入语文,数学,英语成绩:\n");	
	scanf("%d %d %d",&n->cgrade,&n->mgrade,&n->egrade);		
	n->next=q->next;
	q->next=n;
}

2 . linklist_main.c代码

#include<stdio.h>
#include<stdlib.h>
#include <malloc.h>
#include "linklist.h"

int main() 
{
	unsigned int n,m,a;
	printf("请输入学生数量\n");
	scanf("%d",&n);
	linklist v=createlist(n);
while(1)
{
	printf("\n请选择功能:\n");
	printf("\n1:查找  2:删除  3:更改  4:插入  5:显示\n"); 
	scanf("%d",&a); 
	switch(a)
	{
		case 1: printf("请输入学生序号:\n");
		scanf("%d",&m);
		findlist(v,m);break;
		case 2: printf("请输入学生序号:\n");
		scanf("%d",&m);
		deletelist(v,m);break;
		case 3: printf("输入学生序号:\n");
		scanf("%d",&m);
		replacelist(v,m);break;
		case 4: printf("输入插入序号:\n");
		scanf("%d",&m);
		insertlist(v,m);break;		
		case 5: displaylist(v);break;
		default :printf("请重新选择功能:\n");
	}
}
return 1;
}

运行结果:
数据结构 创建结构体学生表 c语言
数据结构 创建结构体学生表 c语言

相关文章: