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

一、实验目的
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 main()  
{   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;  
}  
输出结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值