网络

教育改变生活

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 823|回复: 0
打印 上一主题 下一主题

【数据结构】线性表之顺序表

[复制链接]

619

主题

626

帖子

2820

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2820
跳转到指定楼层
楼主
发表于 2020-11-19 15:49:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
建立一个线性表,首先依次输入数据元素1231010个数并输出线性表和线性表个数,然后删除第56个数据元素后输出线性表和线性表个数,最后在线性表的第6个位置输入20并输出线性表和线性表个数。查询线性表中第5个元素的值;查询值8在线性表中的位置(有的话显示位置,没有的话就输出“查询不到”);实现方法要求如下:
1)采用直接编写一个主函数实现。
2)顺序表类的定义和实现代码存放在文件SeqList.h
步骤1:使用VC++6.0创建项目;

打开VC++6.0,选择“文件|新建”,打开新建项目对话框,在打开的新建对话框中选择“工程”选项卡,在该选项卡下选择“Win32 Console Application”,在右边的“工程名称”中输入工程名(如:listtest2等)----注意:不能用中文名称,也不能以数字开头,在“位置”处修改保存路径(如: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;

};
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

WEB前端

QQ|手机版|小黑屋|金桨网|助学堂  咨询请联系站长。

GMT+8, 2024-5-12 13:08 , Processed in 1.299073 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表