教育改变生活
标题: 【数据结构】线性表之顺序表 [打印本页]
作者: wander 时间: 2020-11-19 15:49
标题: 【数据结构】线性表之顺序表
建立一个线性表,首先依次输入数据元素1,2,3,…,10这10个数并输出线性表和线性表个数,然后删除第5、6个数据元素后输出线性表和线性表个数,最后在线性表的第6个位置输入20并输出线性表和线性表个数。查询线性表中第5个元素的值;查询值8在线性表中的位置(有的话显示位置,没有的话就输出“查询不到”);实现方法要求如下:
1)采用直接编写一个主函数实现。
2)顺序表类的定义和实现代码存放在文件SeqList.h中
步骤1:使用VC++6.0创建项目;
打开VC++6.0,选择“文件|新建”,打开新建项目对话框,在打开的新建对话框中选择“工程”选项卡,在该选项卡下选择“Win32 Console Application”,在右边的“工程名称”中输入工程名(如:list、test2等)----注意:不能用中文名称,也不能以数字开头,在“位置”处修改保存路径(如:D:\);然后点击“确定”后进入下一窗口,选择“一个‘HelloWorld’程序”,点击“完成”,在弹出的对话框中选择“确定”。新建项目完成。
步骤2:新建类Seqlist,并编辑:
单击菜单栏上的“插入|类”,在弹出的对话框中的“名称”文本框中输入“SeqList”,单击“确定”添加类。在VC++6.0的左侧编辑面板的属性菜单中双击新建的类“SeqList”,打开编辑窗口编辑类。
SeqList类的部分代码如下:
#include <iostream>
using namespace std;
//注意:在vs2010中cout的输出要使用:std::cout<<temp<<" ",可以在预编译命令中添加;
const int MaxSize = 100; //100只是示例性的数据,可以根据实际问题具体定义
class SeqList
{
public:
SeqList();//无参构造函数,建立一个空的顺序表
~SeqList(){}//析构函数为空
SeqList(Int a[ ], int n); //有参构造函数,建立一个长度为n的顺序表
int Length( ) {return length;} //求线性表的长度
Int Get(int i); //按位查找,在线性表中查找第i个元素
int Locate(Int x ); //按值查找,在线性表中查找值为x的元素序号
void Insert(int i,Int x); //插入操作,在线性表中第i个位置插入值为x的元素
Int Delete(int i); //删除操作,删除线性表的第i个元素
void PrintList( ); //遍历操作,按序号依次输出各元素
private:
Int data[MaxSize]; //存放数据元素的数组
int length; //线性表的长度,即当前数组个数
}; //注意:此处分号不能省略
/实现顺序表无参构造函数
SeqList::SeqList()
{ length=0;
}
//实现顺序表有参构造函数
SeqList::SeqList(Int a[ ], int n)
{
if(n > MaxSize)
{
throw"传入的顺序表长度过长";
}
//给顺序表的存储元素的数组赋值
for(int i = 0; i < n; i++)
{
data= a;
}
//给顺序表的长度赋值
length= n;
}
void SeqList:: Insert(int i,Intx) //插入操作,在线性表中第i个位置插入值为x的元素
{
if(i>=1&&i<=length)
{
for(int j=length;j>=i;j--)
data[j]=data[j-1];
data[i-1]=x;
length++;
}
else
throw"插入位置错误!";
}
//实现顺序表按位查找
Int SeqList::Get(int i)
{
if(i>0&&i<length)
returndata[i-1];
else
throw"位置错误";
}
//按值查找,在线性表中查找值为x的元素序号.未找到返回0;
int SeqList:: Locate(Int x )
{
for(inti=0;i<length;i++)
if(x==data)return(i+1);
return0;
}
Int SeqList :: Delete(int i) //删除操作,删除线性表的第i个元素
{
if (length==0) throw "下溢";
if (i<1 || i>length) throw"位置非法";
Int x=data[i-1]; //先保存要删除的数据元素,以备返回。
for (int j=i; j<length; j++) //循环移位
data[j-1]=data[j]; //注意此处j已经是元素所在的数组下标
length--;
return x;
}
void SeqList :: PrintList( ) //遍历操作,按序号依次输出各元素
{
if(length < 1)
{
throw"顺序表中没有元素";
}
else
{
//顺序输出顺序表元素
for(int i = 0; i < length; i++)
{
cout<<data<<"";
}
cout<<endl;
}
}
保存文件;
步骤3:编写主程序
#include <iostream.h> //vs2010中使用:#include <iostream>
#include "stdafx.h"
#include<iostream>
#include "SeqList.h"
int main(int argc, char* argv[])
{
inta[]={1,2,3,4,5,6,7,8,9,10};
SeqList seql= SeqList (a,10);
cout<<"顺序表为:";
seql.PrintList();
printf("顺序表长度为:%d\n",seql.Length());
cout<<"第2个位置的元素是:"<<seql.Get(2)<<endl;
cout<<"元素值3的位置是:"<<seql.Locate(3)<<endl;
cout<< "---------------------------------------" << endl;
cout<<"删除第5个数后";
seql.Delete(5);
cout<<"顺序表为:";
seql.PrintList();
printf("顺序表长度为:%d\n",seql.Length());
cout<< "---------------------------------------" << endl;
cout<<"在第6位置插入20后,";
seql.Insert(6,20);
cout<<"顺序表为:";
seql.PrintList();
printf("顺序表长度为:%d\n",seql.Length());
cout<< "---------------------------------------" << endl;
printf("\nHelloWorld!\n");
getchar();
//cin.get();//暂停,等待输入
return0;
};
欢迎光临 教育改变生活 (http://bbs.goldoar.com/) |
Powered by Discuz! X3.2 |