数据结构顺序表及链表实验
实验目的 : 1 、掌握线性表的定义; 2 、掌握线性表的基本操作,如建立、查找、插入和删除等。 实验内容: 定义1个包括学生信息(学号,姓名,成绩)的的 顺序表和链表,使其具有以下功能: (1) 根据指定学生个数,逐一输入学生信息; (2) 逐一显示学生表中所有学生的相干信息; (3) 根据姓名进行查找,返回此学生的学号和成绩; (4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩); (5) 给定1个学生信息,插入到表中指定的位置; (6) 删除指定位置的学生记录; (7) 统计表中学生个数。
参考信息 : Definition of structure student : typedef struct { char no[8]; //8 位学号 char name[20]; // 姓名 int price; // 成绩 }Student;
Definition of sequential list: typedef struct { Student *elem; // 指向数据元素的基地址 int length; // 线性表确当前长度 }SqList ;
Definition of linked list : typedef struct LNode{ Student data; // 数据域 struct LNode *next; // 指针域 }LNode,*LinkList;
实验要求 : (1) 程序要添加适当的注释,程序的书写要采取 缩进格式 。 (2) 程序要具在1定的 硬朗性,即当输入数据非法时, 程序也能适当地做出反应,如 插入删除时指定的位置不对 等等。 (3) 程序要做到 界面友好,在程序运行时用户可以根据相应的提示信息进行操作。 (4) 根据实验报告模板详细书写实验报告,在实验报告中给出链表 根据姓名进行查找的算法和插入算法的流程图 。 (5) 上传源程序到Saike网络教学平台。顺序表的源程序保存为 SqList.c ,链表的源程序保存为 LinkList.c 。 链表实现: //链表实现
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
using namespace std;
typedef struct {
char name[20]; //姓名
char nu[8]; //8位学号
int price; //成绩
} Student;
typedef struct LNode {
Student data; //数据域
struct LNode *next; //指针域
} LNode,*LinkList;
LNode L;
LinkList q;
void Input() {
printf(" 请输入要录入的学生信息(包括姓名(cstring),学号(cstring),成绩(int))个数:");
int num,k=0;
LinkList p;
scanf("%d",&num);
while(num--) {
p=(LNode *)malloc(sizeof(LNode));
printf("请输入第%d个学生的信息:",++k);
scanf("%s%s%d",p->data.name,p->data.nu,&p->data.price);
p->next=NULL;
q=&L;
while(q->next!=NULL) {
q=q->next;
// printf("---n");
}
q->next=p;
}
printf("录入终了n");
}
void Output() {
q=L.next;
printf("姓名 学号 成绩n");
while(q->next!=NULL) {
printf("%s %s %dn",q->data.name,q->data.nu,q->data.price);
q=q->next;
}
printf("%s %s %dn",q->data.price);
}
void search() {
printf("请输入学生姓名(输入⑴结束查询):");
char c[20];
int flag=0;
q=L.next;
while(scanf("%s",c)&&c[0]!='-') {
flag=0;
while(q->next!=NULL) {
if(strcmp(c,q->data.name)==0) {
printf("姓名:%s 学号:%s 成绩:%dn",q->data.price);
flag=1;
break;
}
q=q->next;
}
if(q->next==NULL&&strcmp(c,q->data.name)==0) {
printf("姓名:%s 学号:%s 成绩:%dn",q->data.price);
flag=1;
}
if(!flag)
printf("不存在该学生的信息n");
printf("请输入学生姓名(输入⑴结束查询):");
}
printf("查询结束n");
}
void find() {
printf("输入要查找第几个学生的信息:");
int k,step=0,cnt=0;
scanf("%d",&k);
q=L.next;
while(q->next!=NULL) {
step++;
if(step==k) {
printf("姓名:%s 学号:%s 成绩:%dn",q->data.price);
cnt=1;
break;
}
q=q->next;
}
if(step==k⑴) {
printf("姓名:%s 学号:%s 成绩:%dn",q->data.price);
cnt=1;
}
if(!cnt)
printf("不存在此学生信息n");
}
void insert() {
LinkList p;
p=(LNode *)malloc(sizeof(LNode));
printf("请输入要插入的学生信息:");
scanf("%s%s%d",&p->data.price);
int k,cnt=0;
printf("请输入要插入的第几个位置:");
scanf("%d",&k);
q=L.next;
while(q->next!=NULL) {
step++;
if(step==k⑴) {
cnt=1;
break;
}
q=q->next;
}
if(step==k⑴) {
p->next=q->next;
q->next=p;
}
if(step==k⑵) {
p->next=NULL;
q->next=p;
cnt=1;
}
if(!cnt) {
printf("位置输入过大n");
}
printf("插入终了n");
}
void cutout() {
int k,cnt=0;
LinkList p;
printf("请输入要删除第几个学生信息:");
scanf("%d",&k);
q=L.next;
while(q->next!=NULL) {
step++;
if(step==k⑴) {
cnt=1;
break;
}
q=q->next;
}
if(step==k⑴) {
p=q->next;
q->next=p->next;
free(p);
}
if(!cnt)
printf("位置输入过大n");
printf("删除终了n");
}
void statistics() {
int step=0;
q=L.next;
while(q->next!=NULL) {
step++;
q=q->next;
}
printf("统计表中的学生个数是%dn",step+1);
}
void began() {
printf("学生成绩管理系统:n");
printf("********************************************************************************n");
printf(" 1.输入学生信息n");
printf(" 2.显示学生表中的学生相干信息n");
printf(" 3.根据姓名查找学生学号和成绩n");
printf(" 4.得到指定位置相应的学生信息n");
printf(" 5.插入学生信息n");
printf(" 6.删除指定位置的学生记录n");
printf(" 7.统计表中的学生个数n");
printf(" 8.安全退出nn");
printf("********************************************************************************n");
printf("请输入要实现的功能编号^.^:");
}
int main() {
began();
int x;
while(scanf("%d",&x)&&x!=8) {
switch(x) {
case 1: {
Input();
break;
}
case 2: {
Output();
break;
}
case 3: {
search();
break;
}
case 4: {
find();
break;
}
case 5: {
insert();
break;
}
case 6: {
cutout();
break;
}
case 7: {
statistics();
break;
}
}
system("pause");
system("cls");
began();
}
printf("安全退出n");
return 0;
} 顺序表实现: #include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<malloc.h>
#include<algorithm>
using namespace std;
const int N = 105;
typedef struct {
char name[20]; //姓名
char nu[8]; //8位学号
int price; //成绩
} Student;
typedef struct {
Student *elem;
int length;
} SqList;
SqList L;
void build() {
L.elem=(Student *)(malloc(sizeof(Student)*N)); //建立线性表
L.length=0;
if(!L.elem)
printf("建立顺序表失败n");
}
void Input() { //输入
int y,k,p=0;
printf("请输入要读入的学生信息(包括姓名(cstring),学号(cstring),成绩(int)) 数目:");
scanf("%d",&y);
for(int i=0; i<y; i++) {
if(i>=100) {
printf("内存超限n");
return ;
}
printf("请输入第%d个学生信息:",++p);
scanf("%s%s%d",L.elem[i].name,L.elem[i].nu,&L.elem[i].price);
L.length++;
}
printf("建立学生成绩表完成n");
}
void Output() { //输出
printf("姓名 学号 成绩n");
for(int i=0; i<L.length; i++) {
printf("%s %s %dn",L.elem[i].price);
}
//printf("按回车键继续n");
}
void search() { //按姓名查找
printf("输入要查找的学生姓名:");
char tem[20];
scanf("%s",tem);
for(int i=0; i<L.length; i++) {
if(!strcmp(L.elem[i].name,tem)) {
printf("姓名:%s 学号:%s 成绩:%dn",L.elem[i].price);
return ;
}
}
printf("没有此学生信息n");
}
void find() { //按位置查找
printf("输入要查找第几个学生的信息:");
int temp;
scanf("%d",&temp);
printf("姓名:%s 学号:%s 成绩:%dn",L.elem[temp⑴].name,L.elem[temp⑴].nu,L.elem[temp⑴].price);
}
void insert() { //插入
int num,p=0;
Student e;
printf("输入你想插入的学生数量:");
scanf("%d",&num);
if(L.length+num>=100) {
printf("存储不够,插入失败n");
return ;
}
while(num--) {
int s;
printf("输入要插入的第%d个学生的姓名、学号、成绩:",e.name,e.nu,&e.price);
printf("输入要插入第几个位置:");
scanf("%d",&s);
for(int i=L.length; i>s⑴; i--) {
L.elem[i]=L.elem[i⑴];
}
L.elem[s⑴]=e;
L.length++;
}
printf("插入成功n");
}
void cutout() { //删除
int num;
printf("输入共删除几个学生信息:");
scanf("%d",&num);
while(num--) {
int s;
printf("输入删除第几个学生信息:");
scanf("%d",&s);
if(s>=L.length) {
printf("没有此学生的信息n");
continue;
}
for(int i=s⑴; i<L.length⑴; i++) {
L.elem[i]=L.elem[i+1];
}
L.length--;
}
printf("删除终了n");
}
void statistics() { //表中的学生信息个数
printf("表中的学生信息个数是:%dn",L.length);
}
void began() {
printf("学生成绩管理系统:n");
printf("********************************************************************************n");
printf(" 1.输入学生信息n");
printf(" 2.显示学生表中的学生相干信息n");
printf(" 3.根据姓名查找学生学号和成绩n");
printf(" 4.得到指定位置相应的学生信息n");
printf(" 5.插入学生信息n");
printf(" 6.删除指定位置的学生记录n");
printf(" 7.统计表中的学生个数n");
printf(" 8.安全退出nn");
printf("********************************************************************************n");
printf("请输入要实现的功能编号^.^:");
}
int main() {
began();
build();
int x;
while(scanf("%d",&x)&&x!=8) {
switch(x) {
case 1: {
Input();
break;
}
case 2: {
Output();
break;
}
case 3: {
search();
break;
}
case 4: {
find();
break;
}
case 5: {
insert();
break;
}
case 6: {
cutout();
break;
}
case 7: {
statistics();
break;
}
}
system("pause");
system("cls");
began();
}
printf("退出成功n");
return 0;
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |