您的位置:首页 > 其它

实验一线性表的基本操作实现及其应用

2017-09-21 11:15 393 查看
一、实验目的

1、熟练掌握线性表的结构特点,掌握顺序表的基本操作。2、巩固 C++相关的程序设计方法与技术。3、学会使用顺序表解决实际问题。

二、实验内容

1、顺序表的建立与操作实现建立 n 个元素的顺序表(n 的大小和表里数据自己确定),实现相关的操作:输出,插入,删除,查找等功能。编写完整程序实现,程序语言不限定,使用技术形式不定。

三、实验步骤

1、创建一个模板类;2、构造函数创建列表,Length,Get,Locate,Insert,Delete,Printlist函数;3、在主函数中输入数据。

四、实验心得
书本上给出的示例代码,将它们全部敲到自己电脑的编译环境中不一定能在正常运行,很多细节的东西还需自己一步一步去调试,去修正,去思考。就拿书本上的示例代码中的循环语句来说,里面的变量i并没有定义数据类型,编译时机器就报错了;还有一些错误是逻辑错误,语法并没有问题,但代入数据后发现并不能得出应得的结果,就拿书上代码里条件语句中的“||”和“&&”两个符号来说,意义完全不同,需谨慎。

代码实现如下:

// 顺序表.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
using namespace std;
const int Maxsize=50;
template <typename DT>
class SeqList
{
public:
SeqList(){length=0;}
SeqList(DT a[],int n);
//~SeqList();
int Length(){return length;}
DT Get(int i);
int Locate(DT x);
void Insert(int i,DT x);
DT Delete(int i);
void PrintList();
private:
DT data[Maxsize];
int length;
};
template <typename DT>
SeqList<DT>::SeqList(DT a[],int n)
{
if(n>Maxsize) cout<<"参数非法";
for(int i=0;i<n;i++)
data[i]=a[i];
length=n;
}
template <typename DT>
DT SeqList<DT>::Get(int i)
{if(i<1||i>length)cout<<"查找位置非法";
else return data[i-1];
}
template <typename DT>
int SeqList<DT>::Locate(DT x)
{for(int i=0;i<length;i++)
if(data[i]==x) return i+1;
return 0;
}
template <typename DT>
void SeqList<DT>::Insert(int i,DT x)
{  if (length>Maxsize)cout<<"上溢"<<endl;
if(i<1||i>length+1)cout<<"插入位置非法"<<endl;
for(int j=length;j>=i;j--)
data[j]=data[j-1];
data[i-1]=x;
length++;
}
template <typename DT>
DT SeqList<DT>::Delete(int i)
{if(length==0)cout<<"下溢"<<endl;
if(i<1||i>length)cout<<"删除位置非法"<<endl;
DT x=data[i-1];
for(int j=i;j<length;j++)
data[j-1]=data[j];
length--;
return x;
}
template <typename DT>
void SeqList<DT>::PrintList()
{for(int i=0;i<length;i++)cout<<data[i]<<"  ";cout<<endl;}
int m
4000
ain()
{   int a[5]={90,88,72,93,84};
SeqList <int>seq(a,5);//创建一个列表,初始化
seq.PrintList();//遍历,应输出90 88 72 93 84这五个数据
cout<<seq.Get(5)<<endl;//按位查找第五位,应输出84
cout<<seq.Locate(72)<<endl;//按值查找,应输出72的位置3
seq.Insert(2,100);//插入操作,在第二个位置插入数值100
seq.PrintList();//遍历,应输出90 100 88 72 93 84
cout<<seq.Length()<<endl;//输出列表长度,应输出6
seq.Delete(1);//删除操作,删除列表中第一个数值
seq.PrintList();//应输出100 88 72 93 84
return 0;
}
输出结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: