数据结构实验-线性表及其应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验1 线性表及其应用
实验性质:验证性
实验学时:2学时
一、实验目的
1.掌握线性表的顺序存储结构在计算机的表示方法及其基本操作的实现;
2.掌握线性表的链式存储结构在计算机的表示方法及其基本操作的实现;
3.能够利用线性表结构对实际问题进行分析建模,利用计算机求解。
二、实验预备知识
1.复习C/C++语言相关知识(如:结构体的定义、typedef的使用、函数的定义、调用
及参数传递方式);
2.阅读并掌握顺序表与链表的类型定义及其查找、插入、删除等基本操作。
三、实验内容
1.理解并分别用顺序表、链表的操作运行下列程序:
#include
using namespace std;
#include "Status.h"
typedef int ElemType;
#include "SqList.h" //用#include "LinkList.h"替换
void main()
{
SqList L; //用LinkList L;替换,与#include "LinkList.h"配合
int n,i;
ElemType e;
InitList(L);
cout<<"\nL=";
ListTraverse(L);
cout<<"\n请设置将向线性表L中输入的元素个数:";
cin>>n;
CreateList(L,n);
cout<<"\nL=";
ListTraverse(L);
cout<<"\nL的表长为:"< cout<<"\n请输入想要获取的元素位序:"; cin>>i; if(GetElem(L,i,e)) cout<<"\n第"< else cout<<"\n第"< cout<<"\n请输入要查找的元素:"; cin>>e; if(i=LocateElem(L,e)) cout<<"\n元素"< else cout<<"\n元素"< cout<<"\n请输入插入位置和所插入元素:"; cin>>i>>e; if(ListInsert(L,i,e)) { cout<<"\nL="; ListTraverse(L); } else cout<<"\n插入操作失败!"< cout<<"\n请输入被删元素的位置:"; cin>>i; if(ListDelete(L,i,e)) cout<<"\n被删元素为:"< else cout<<"\n删除操作失败!"< cout<<"\nL="; 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<<"\n请输入"< 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< if(L.length) cout<<"\b)"< else 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)运算,而且不重新开辟存储空间。 实验2 栈和队列的实现 实验性质:验证性 实验学时:2学时 一、实验目的 1.掌握栈的特点、在计算机中的存储表示方法及其基本操作的实现; 2.掌握队列的特点、在计算机中的存储表示方法及其基本操作的实现; 3.能够利用栈和队列求解一些常见问题。 二、实验预备知识 1.阅读并掌握顺序栈、链栈两种存储方法的类型定义及其压栈、弹栈等基本操作。 2.阅读并掌握循环队列、链队列两种存储方法的类型定义及其入队、出队等基本操作。 三、实验内容 1.理解并用顺序栈操作运行下列程序: #include using namespace std; #include "Status.h" typedef int ElemType; #include "SqStack.h" void main() { SqStack S; ElemType e; InitStack(S); Push(S,2); Push(S,4); Push(S,6); Push(S,8); cout<<"\n由栈底至栈顶的元素为:"; StackTraverse(S); cout<<"\n栈的长度为:"< GetTop(S,e); cout<<"\n栈顶元素为:"< Pop(S,e); cout<<"\n由栈底至栈顶的元素为:"; StackTraverse(S); cout<<"\n栈的长度为:"< GetTop(S,e); cout<<"\n栈顶元素为:"< } 2.理解并用循环队列、链队列操作运行下列程序: #include