实验1 线性表顺序存储的应用
以下为《实验1 线性表顺序存储的应用》的无排版文字预览,完整格式请下载
下载前请仔细阅读文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。
第 1 次实验课
摘 要
授课题目(章、节)
实验一 线性表顺序存储的应用
教学主要内容及重点难点:
主要内容:线性表的顺序存储结构及基本操作
重 点:顺序存储结构及其基本运算。
难 点:顺序表的插入,删除操作
内 容
实验一 线性表顺序存储的应用
实验目的:
理解线性表的顺序存储结构的定义、初始化、插入、删除、访问等操作的原理,掌握各种基本操作的实现算法。
实验内容:
在下面代码段中,已给出包含的文件,常量,类型定义、菜单函数、主函数。完整整个程序,在标记A处实现顺序表的定义;在标记B处实现顺序表的9个基本运算(参考教材)。
观察:主函数中如何定义顺序表,如何调用基本运算的函数的?体会实参和形参之间数据是如何传递的?
思考:除了这些基本运算,你还能实现那些顺序表的操作呢(可以是课本上的也可以是自己想到的),你定义的功能函数是什么?在主函数和菜单函数中需要做那些改变?
参考代码:
#include<stdio.h> //头文件,输入输出操作主要使用
#include<stdlib.h> //头文件,包含本程序中的malloc,free system函数
#define LIST_INIT_SIZE 10
#define LIST_INCREMENT 2
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASINLE -1
#define OVERFLOW -2
typedef int Status;
typedef char ElemType; //定义类型ElemType,本例中使用的数据元素类型为char型
//辅助函数的定义
int comp(ElemType a,ElemType b)
{ if(a>b)
return 1;
else if(a<b)
return -1;
else
return 0;
}
void print(ElemType e)
{ printf("%c ",e);
}
//顺序表类型SqList的定义
-------A------
/*顺序表的基本操作InitList,DestroyList,ListEmpty,ListLength,GetElem,LocateElem,ListInsert,ListDelete,ListTraverse的函数定义
注意:算法(伪码)和代码程序的区别,算法中没有定义的变量在代码实现时要定义,代码要符合C/C++语言语法;
体会输出型参数和输入型参数的区别;
注意函数的返回值的设定规律和后面主函数的调用关系
*/
---------B--------
void menu() //菜单函数,显示实验中的主菜单
{
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 插入数据元素 -\n");
printf("- 9 删除数据元素 -\n");
printf("- 0 退出 -\n");
printf("请输入菜单对应的数字:");
}
int main()
{
SqList L;
int i,k;
ElemType c;
for(;;)
{
menu(); //调用菜单函数
scanf("%d",&k);
switch(k)
{
case 1: InitList(L);
printf("初始化顺序表L:L.elem=%u, L.length=%d, L.listsize=%d\n",L.elem,L.length,L.listsize);
system("pause"); //系统函数,暂停界面,显示结果,按任意键继续
system("cls"); //系统函数,清除屏幕上的运行结果和上一次输出的菜单
break;
case 2:DestroyList(L);
printf("释放顺序表L:L.elem=%u L.length=%d L.listsize=%d\n",L.elem,L.length,L.listsize);
system("pause");
system("cls");
break;
case 3: printf("判断顺序表L当前是否为空:");
if(ListEmpty(L)) printf("L is empty.\n");
else printf("L is not empyt.\n");
system("pause");
system("cls");
break;
case 4: printf("顺序表L的当前长度为:%d\n",ListLength(L));
system("pause");
system("cls");
break;
case 5: printf("输出顺序表L:");
ListTraverse(L,print);
printf("\n");
system("pause");
system("cls");
break;
case 6: printf("请输入查找位置1~%d:",ListLength(L));
scanf("%d",&i);
if(GetElem(L,i,c))
printf("%d位置上的数据是%c\n。",i,c);
else
printf("没有找到,请核实查找位置是否正确。\n");
system("pause");
system("cls");
break;
case 7: printf("请输入要查找的数据:");
getchar();
scanf("%c",&c);
if(i=LocateElem(L,c,comp))
printf("%c是顺序表中的第%d个数据。\n",c,i);
else
printf("%c不存在此顺序表中。\n",c);
system("pause");
system("cls");
break;
case 8: printf("请输入要插入的数据:");
getchar();
scanf("%c",&c);
printf("请输入要插入的位置(1-%d):",ListLength(L)+1);
scanf("%d",&i);
if(ListInsert(L,i,c))
printf("插入成功!\n");
else
printf("插入失败,请核实插入位置。\n");
system("pause");
system("cls");
break;
case 9: printf("请输入要删除的数据位置(1-%d):",ListLength(L));
scanf("%d",&i);
if(ListDelete(L,i,c))
printf("删除成功!你删除的数据是:%c\n",c);
else
printf("删除失败,请核实插入位置。\n");
system("pause");
system("cls");
break;
case 0:return 0;
}
}
}
[全文已结束,注意以上仅为全文的文字预览,不包含图片和表格以及排版]
以上为《实验1 线性表顺序存储的应用》的无排版文字预览,完整格式请下载
下载前请仔细阅读上面文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。
阅读本文的人,还看了
十二生肖谁是败家子 花钱如流水再大的家业也会被你败完
浏览量:71发布于:2021-07-26 0条评论
都灵耶稣裹尸布之谜 困扰人类千年的谜团能否解开
浏览量:156发布于:2021-01-19 0条评论
服务区应对新型冠状病毒感染肺炎疫情应急预案
浏览量:57发布于:2021-12-13 0条评论
清初重臣范文程到底算不算汉奸?
浏览量:24发布于:2022-01-18 0条评论
世界最强的地震是几级,哪个国家、时间与伤亡人数._
浏览量:51发布于:2022-01-06 0条评论