实验1 线性表及其应用
实验性质:验证性 实验学时:2学时
一、实验目的
1.掌握线性表的顺序存储结构在计算机的表示方法及其基本操作的实现; 2.掌握线性表的链式存储结构在计算机的表示方法及其基本操作的实现; 3.能够利用线性表结构对实际问题进行分析建模,利用计算机求解。
二、实验预备知识
1.复习C/C++语言相关知识(如:结构体的定义、typedef的使用、函数的定义、调用及参数传递方式);
2.阅读并掌握顺序表与链表的类型定义及其查找、插入、删除等基本操作。
三、实验内容
1.理解并分别用顺序表、链表的操作运行下列程序:
#include
#include \ //用#include \替换
void main() {
SqList L; //用LinkList L;替换,与#include \配合 int n,i;
ElemType e; InitList(L); cout<<\ ListTraverse(L);
cout<<\请设置将向线性表L中输入的元素个数:\ cin>>n;
CreateList(L,n); cout<<\ ListTraverse(L);
cout<<\的表长为:\ cout<<\请输入想要获取的元素位序:\ cin>>i;
if(GetElem(L,i,e)) cout<<\第\个元素为:\ else cout<<\第\个元素不存在!\ cout<<\请输入要查找的元素:\ cin>>e;
if(i=LocateElem(L,e)) cout<<\元素\的位置为:\
else cout<<\元素\不存在!\ cout<<\请输入插入位置和所插入元素:\ cin>>i>>e;
if(ListInsert(L,i,e)) { cout<<\ ListTraverse(L); }
else cout<<\插入操作失败!\ cout<<\请输入被删元素的位置:\ cin>>i;
if(ListDelete(L,i,e)) cout<<\被删元素为:\ else cout<<\删除操作失败!\ cout<<\ ListTraverse(L); }
本题目说明:
(1)头文件Status.h的内容如下:
#define TRUE 1 #define FALSE 0 #define OK 1
#define ERROR 0
#define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status;
(2)头文件SqList.h(内容包括顺序表的结构定义及基本操作实现)。 (3)头文件LinkList.h(内容包括链表的结构定义及基本操作实现)。 (4)顺序表中基本操作的补充:
? CreateList(&L,n):向顺序表L中输入n个元素(0≤n≤MAXSIZE)。 Status CreateList(SqList &L,int n) {
int i;
if(!L.elem||n<0||n>MAXSIZE) return ERROR; cout<<\请输入\个元素:\ for(i=1;i<=n;i++) cin>>L.elem[i-1]; //可以用随机函数rand()自动生成 L.length=n; return OK; }
? ListTraverse(L):以线性表的记录形式遍历输出顺序表L,例如:(a1,a2,…,ai,…an)。
void ListTraverse(SqList L) {
int i;
}
cout<<'(';
for(i=1;i<=L.length;i++) cout< 2.设计实现一个算法,用以对两个非递减有序表A、B进行合并,其中A=(2,5,8,9) ,B=(3,4,8,10,12,20)。 3.(任选题)已知有两个多项式P(x)和Q(x),基于链表设计算法实现P(x)+Q(x)运算,而且不重新开辟存储空间。
相关推荐: