实验1 线性表顺序存储的应用

分类:唯美句子浏览量:53发布于:2年前 作者:句子迷

以下为《实验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 线性表顺序存储的应用》的无排版文字预览,完整格式请下载

下载前请仔细阅读上面文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。

阅读本文的人,还看了