实验1 线性表及其应用
实验性质:验证性
实验学时:2学时
1、实验目的
二叉树的基本性质1.掌握线性表的顺序存储结构在计算机的表示方法及其基本操作的实现;
2.掌握线性表的链式存储结构在计算机的表示方法及其基本操作的实现;
3.能够利用线性表结构对实际问题进行分析建模,利用计算机求解。
2、实验预备知识
1.复习C/C++语言相关知识(如:结构体的定义、typedef的使用、函数的定义、调用及参数传递方式);
2.阅读并掌握顺序表与链表的类型定义及其查、插入、删除等基本操作。
3、实验内容
1.理解并分别用顺序表、链表的操作运行下列程序:
#include <iostream>
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的表长为:"<<ListLength(L)<<endl;
cout<<"\n请输入想要获取的元素位序:";
cin>>i;
if(GetElem(L,i,e)) cout<<"\n第"<<i<<"个元素为:"<<e<<endl;
else cout<<"\n第"<<i<<"个元素不存在!"<<endl;
cout<<"\n请输入要查的元素:";
cin>>e;
if(i=LocateElem(L,e)) cout<<"\n元素"<<e<<"的位置为:"<<i<<endl;
else cout<<"\n元素"<<e<<"不存在!"<<endl;
cout<<"\n请输入插入位置和所插入元素:";
cin>>i>>e;
if(ListInsert(L,i,e))
{
cout<<"\nL=";
ListTraverse(L);
}
else cout<<"\n插入操作失败!"<<endl;
cout<<"\n请输入被删元素的位置:";
cin>>i;
if(ListDelete(L,i,e)) cout<<"\n被删元素为:"<<e<<endl;
else cout<<"\n删除操作失败!"<<endl;
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请输入"<<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<<L.elem[i-1]<<',';
if(L.length) cout<<"\b)"<<endl;
else cout<<')'<<endl;
}
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学时
4、实验目的
4.掌握栈的特点、在计算机中的存储表示方法及其基本操作的实现;
5.掌握队列的特点、在计算机中的存储表示方法及其基本操作的实现;
6.能够利用栈和队列求解一些常见问题。
5、实验预备知识
3.阅读并掌握顺序栈、链栈两种存储方法的类型定义及其压栈、弹栈等基本操作。
4.阅读并掌握循环队列、链队列两种存储方法的类型定义及其入队、出队等基本操作。
6、实验内容
1. 理解并用顺序栈操作运行下列程序:
#include <iostream>
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栈的长度为:"<<StackLength(S)<<endl;
GetTop(S,e);
cout<<"\n栈顶元素为:"<<e<<endl;
Pop(S,e);
cout<<"\n由栈底至栈顶的元素为:";
StackTraverse(S);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论