资源描述
班级: 姓名: 学号:
实验一 线性表得基本操作
一、 实验目得
1、掌握线性表得定义;
2、掌握线性表得基本操作,如建立、查找、插入与删除等。
二、 实验内容
定义一个包含学生信息(学号,姓名,成绩)得顺序表与链表(二选一),使其具有如下功能:
(1) 根据指定学生个数,逐个输入学生信息;
(2) 逐个显示学生表中所有学生得相关信息;
(3) 根据姓名进行查找,返回此学生得学号与成绩;
(4) 根据指定得位置可返回相应得学生信息(学号,姓名,成绩);
(5) 给定一个学生信息,插入到表中指定得位置;
(6) 删除指定位置得学生记录;
(7) 统计表中学生个数.
三、 实验环境
Visual C++
四、 程序分析与实验结果
#include<stdio、h〉
#include<malloc、h〉
#include<stdlib、h〉
#include〈string、h>
#define OK 1
#define ERROR 0
#define OVERFLOW —2
typedef int Status; // 定义函数返回值类型
typedef struct
{
char num[10]; // 学号
ﻩchar name[20]; // 姓名
double grade; // 成绩
}student;
typedef student ElemType;
typedef struct LNode
{
ﻩElemType data; // 数据域
struct LNode *next; //指针域
}LNode,*LinkList;
Status InitList(LinkList &L) // 构造空链表 L
{
ﻩL=(struct LNode*)malloc(sizeof(struct LNode));
L-〉next=NULL;
ﻩreturn OK;
}
Status GetElem(LinkList L,int i,ElemType &e) // 访问链表,找到 i位置得数据域,返回给 e
{
ﻩLinkList p;
p=L—〉next;
int j=1;
while(p&&j<i)
ﻩ{
ﻩﻩp=p—>next;
++j;
}
if(!p||j〉i) return ERROR;
ﻩe=p—〉data;
ﻩreturn OK;
}
Status Search(LNode L,char str[],LinkList &p) // 根据名字查找
{
p=L、next;
ﻩwhile(p)
ﻩ{
ﻩﻩif(strcmp(p—>data、name,str)==0)
ﻩﻩreturn OK;
ﻩp=p-〉next;
}
ﻩreturn ERROR;
}
Status ListInsert(LinkList L,int i,ElemType e) // 在 i个位置插入某个学生得信息
{
LinkList p,s;
p=L;
ﻩint j=0;
while(p&&j〈i-1)
ﻩ{
ﻩﻩp=p-〉next;
++j;
ﻩ}
ﻩif(!p||j>i-1)ﻩreturn ERROR;
ﻩs=(struct LNode*)malloc(sizeof(LNode));
ﻩs-〉data=e;
ﻩs->next=p-〉next;
ﻩp—>next=s;
ﻩreturn OK;
}
Status ListDelete(LinkList p,int i) // 删除 i位置得学生信息
{
int j=0;
while((p—>next)&&(j<i-1))
ﻩ{
ﻩp=p—〉next;
ﻩ ++j;
}
if(!(p—〉next)||(j>i—1))ﻩreturn ERROR;
LinkList q;
ﻩq=p—>next;
p-〉next=q—>next;
ﻩdelete q;
return OK;
}
void Input(ElemType *e)
{
ﻩprintf(”姓名:");ﻩscanf("%s”,e-〉name);
ﻩprintf(”学号:”); scanf("%s”,e—>num);
ﻩprintf(”成绩:"); scanf("%lf",&e-〉grade);
printf(”输入完成\n\n”);
}
void Output(ElemType *e)
{
printf("姓名:%-20s\n学号:%—10s\n成绩:%-10、2lf\n\n",e->name,e—>num,e->grade);
}
int main()
{
LNode L;
ﻩLinkList p;
ﻩElemType a,b,c,d;
ﻩprintf("\n********************************\n\n");
ﻩputs("1、 构造链表");
ﻩputs("2、 录入学生信息”);
ﻩputs("3、 显示学生信息");
ﻩputs("4、 输入姓名,查找该学生");
ﻩputs(”5、 显示某位置该学生信息");
ﻩputs("6、 在指定位置插入学生信息”);
ﻩputs("7、 在指定位置删除学生信息”);
puts("8、 统计学生个数");
puts("0、 退出");
printf("\n********************************\n\n");
int x,choose=-1;
while(choose!=0)
{
puts("请选择:");
ﻩscanf("%d",&choose);
ﻩswitch(choose)
ﻩ{
ﻩﻩcase 1:
ﻩ ﻩif(InitList(p))
ﻩ ﻩﻩﻩ printf("成功建立链表\n\n”);
ﻩﻩ else
ﻩ printf(”链表建立失败\n\n");
ﻩﻩ ﻩﻩbreak;
ﻩﻩ case 2:
ﻩ ﻩprintf(”请输入要录入学生信息得人数:");
ﻩ ﻩ ﻩscanf(”%d”,&x);
ﻩﻩ for(int i=1;i〈=x;i++)
ﻩﻩﻩﻩ {
ﻩ ﻩ printf("第%d个学生:\n”,i);
ﻩﻩ ﻩﻩﻩInput(&a);
ﻩﻩﻩ ﻩ ListInsert(&L,i,a);
ﻩ ﻩ }
ﻩ ﻩbreak;
ﻩ ﻩcase 3:
ﻩ ﻩ for(int i=1;i<=x;i++)
ﻩﻩﻩ ﻩ{
ﻩ GetElem(&L,i,b);
ﻩﻩﻩ ﻩOutput(&b);
ﻩ }
ﻩ ﻩﻩbreak;
ﻩ case 4:
ﻩﻩ char s[20];
ﻩ ﻩ printf(”请输入要查找得学生姓名:");
ﻩﻩ scanf("%s",s);
ﻩﻩﻩ if(Search(L,s,p))
ﻩﻩﻩﻩ ﻩOutput(&(p—>data));
ﻩﻩﻩ else
ﻩ ﻩ puts("对不起,查无此人”);
ﻩputs("”);
ﻩ ﻩbreak;
ﻩﻩ case 5:
ﻩ ﻩprintf("请输入要查询得位置:");
ﻩ ﻩﻩint id1;
ﻩ scanf("%d",&id1);
ﻩﻩﻩGetElem(&L,id1,c);
ﻩﻩ ﻩﻩOutput(&c);
ﻩ ﻩ ﻩbreak;
ﻩ ﻩcase 6:
ﻩﻩ printf ("请输入要插入得位置:");
ﻩﻩ int id2;
ﻩﻩﻩscanf("%d",&id2);
ﻩﻩ printf("请输入学生信息:\n");
ﻩﻩ ﻩInput(&d);
ﻩ ﻩif(ListInsert(&L,id2,d))
ﻩﻩﻩﻩ {
ﻩﻩ x++;
ﻩ ﻩ ﻩﻩputs("插入成功”);
ﻩ ﻩﻩﻩputs("”);
ﻩﻩ ﻩ }
ﻩﻩﻩﻩﻩelse
ﻩﻩ ﻩ {
ﻩ puts("插入失败”);
ﻩﻩ puts(””);
ﻩﻩ ﻩ }
ﻩ break;
ﻩ case 7:
ﻩ ﻩprintf("请输入要删除得位置:");
ﻩﻩ ﻩint id3;
ﻩﻩﻩﻩscanf("%d”,&id3);
ﻩﻩﻩﻩ if(ListDelete(&L,id3))
ﻩ ﻩ {
ﻩﻩx—-;
ﻩﻩ ﻩﻩ puts("删除成功");
ﻩ ﻩﻩﻩputs("”);
ﻩﻩ ﻩﻩ}
ﻩﻩ ﻩﻩelse
ﻩ ﻩ{
ﻩﻩ ﻩ puts(”删除失败");
ﻩﻩﻩ ﻩputs("");ﻩ
ﻩ ﻩﻩﻩ}
ﻩ break;
ﻩ case 8:
ﻩprintf(”已录入得学生个数为:%d\n\n”,x);
ﻩ ﻩﻩbreak;
}
}
ﻩprintf("\n\n谢谢您得使用,请按任意键退出\n\n\n");
system(”pause");
ﻩreturn 0;
}
用户界面:
(1) 根据指定学生个数,逐个输入学生信息:
(2) 逐个显示学生表中所有学生得相关信息:
(3) 根据姓名进行查找,返回此学生得学号与成绩:
(4) 根据指定得位置可返回相应得学生信息(学号,姓名,成绩):
(5) 给定一个学生信息,插入到表中指定得位置:
(6) 删除指定位置得学生记录:
(7) 统计表中学生个数:
五、 实验总结
数据结构就是一门专业技术基础课。它要求学会分析研究计算机加工得数据结构得特性,以便为应用涉及得数据选择适当得逻辑结构,存储结构及相应得算法,并初步掌握算法得时间分析与空间分析技术。不仅要考虑具体实现哪些功能,同时还要考虑如何布局,这次得实验题目就是根据我们得课本学习进程出得,说实话,我并没有真正得读懂书本得知识,所以刚开始得时候,感到很棘手,于就是又重新细读课本,这一方面又加强了对书本得理解,在这上面花费了一些心血,觉得它并不简单,就是需要花大量时间来编写得。。在本次实验中,在程序构思及设计方面有了较大得锻炼,能力得到了一定得提高。
展开阅读全文