C语言数据结构实验一
**实验要求:实验目的:
1、掌握线性表的定义;
2、掌握线性表的基本操作,如建立、查找、插入和删除等。
实验内容:
定义一个包含学生信息(学号,姓名,成绩)的的顺序表和链表,使其具有如下功能:
(1) 根据指定学生个数,逐个输入学生信息;
(2) 逐个显示学生表中所有学生的相关信息;
(3) 根据姓名进行查找,返回此学生的学号和成绩;
(4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩);
(5) 给定一个学生信息,插入到表中指定的位置;
(6) 删除指定位置的学生记录;
(7) 统计表中学生个数。
实验提示:
学生信息的定义:
typedef struct {
char no[8]; //8位学号
char name[20]; //姓名
int score; //成绩
}Student;
顺序表的定义
typedef struct {
Student *elem; //指向数据元素的基地址
int length; //线性表的当前长度
}SqList;
链表的定义:
typedef struct LNode{
Student data; //数据域
struct LNode *next; //指针域
}LNode,*LinkList;
实验要求:
(1) 程序要添加适当的注释,程序的书写要采用缩进格式。
(2) 程序要具在一定的健壮性,即当输入数据非法时,程序也能适当地做出反应,如插入删除时指定的位置不对等等。
(3) 程序要做到界面友好,在程序运行时用户可以根据相应的提示信息进行操作。
(4) 根据实验报告模板详细书写实验报告,在实验报告中给出链表根据姓名进行查找的算法和插入算法的流程图。
顺序表代码
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 100//顺序表的最大空间
typedef struct {
char no[8]; //8位学号
char name[20]; //姓名
int score; //成绩
}student;
typedef struct {
student *elem; //指向数据元素的基地址
int length; //线性表的当前长度
}sqlist;
int creat(sqlist *L)//顺序表的初始化
{
L->elem=(student*)malloc(sizeof(student)*MAXSIZE);//分配空间
if(!L->elem)printf("分配失败");
L->length=0;
return 1;
}
student getelem(sqlist *L,int i)//取i位置元素值
{
return L->elem[i];
}
int search(sqlist *L)//查找学生函数
{
int t=0;
char s[20];
printf("请输入要查找的学生姓名:");
scanf("%s",s);
int i;
for(i=1;i<=L->length;i++)
{
if(strcmp(L->elem[i].name,s)==0)
t=i;
}
return t;
}
int insert(sqlist *L,int i,student e)//插入函数
{
int j;
if((i<1)||(i>L->length+1)) printf("error");
if(L->length==MAXSIZE) printf("error");
for(j=L->length;j>=i;j--)
{
L->elem[j+1]=L->elem[j];
}
L->elem[i]=e;
++L->length;
return 1;
}
int Delete(sqlist *L,int i)//删除函数
{
int j;
if((i<1)||(i>L->length+1)) printf("error");
for(j=i;j<=L->length;j++)
{
L->elem[j]=L->elem[j+1];
}
--L->length;
return 1;
}
void input