数据结构之顺序表(C++版)

#include <iostream>
#include <stdlib.h>
#define MAXLISTSIZE 100 //预设的存储空间最大容量

using namespace std;
typedef string ElemType;
typedef struct{
ElemType *elem; //存储空间基址
int length; //当前长度
int listsize; //允许的最大存储容量(以sizeof(ElemType)为单位)
}SqList; //俗称顺序表

void InitList(SqList &L);
void LocateElem(SqList L);
void ListInsert(SqList &L);
void ListDelete(SqList &L);
void DestroyList(SqList &L);
void ListLength(SqList L);
void ListEmpty(SqList L);
void GetElem(SqList L);
void MergeList_Sq();

int main(void)
{
SqList L;
int z;
cout << "+---------------------------+" << ‘\n‘;
cout << "|----------顺序表-----------|" << ‘\n‘;
cout << "+---------------------------+" << ‘\n‘;
cout << "提示:为保证您的操作得到保存,请按正常顺序退出系统^_^" << ‘\n‘;
do
{
cout << ‘\n‘ << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"--------------------------------" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+ 主菜单 |" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+--------------------------------" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+ [1]----顺序表初始化 |" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+ [2]----顺序表的定位 |" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+ [3]----顺序表的插入 |" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+ [4]----顺序表的删除 |" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+ [5]----顺序表的销毁 |" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+ [6]----顺序表求表长 |" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+ [7]----顺序表的判空 |" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+ [8]----顺序表的存取 |" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+ [9]----顺序表的合并 |" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+ [0]----退出系统 |" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"--------------------------------" << ‘\n‘;
cout << "请输入您的选择:";
cin >> z;
switch(z)
{
case 0 : break;
case 1 : InitList(L);break;
case 2 : LocateElem(L);break;
case 3 : ListInsert(L);break;
case 4 : ListDelete(L);break;
case 5 : DestroyList(L);break;
case 6 : ListLength(L);break;
case 7 : ListEmpty(L);break;
case 8 : GetElem(L);break;
case 9 : MergeList_Sq();break;
default:cout << "无效选项!" << ‘\n‘;system("pause");
}
}
while(z!= 0);
}

//顺序表的初始化赋值
void InitList(SqList &L)
{
int j;
int maxsize;
cout << "请输入顺序表的最大长度: ";
cin >> maxsize;
if(maxsize == 0)
maxsize = MAXLISTSIZE;
L.elem = new ElemType[maxsize];
if(!L.elem) exit(1); //储存分配失败
cout << "请输入顺序表的长度: ";
cin >> L.length;
L.listsize = maxsize; //该顺序表可以存储元素的最大容量
cout << "请输入顺序表的元素: ";
for (j = 0; j < L.length; j++)
{
cin >> L.elem[j];
}
system("pause"); //任意键继续
}//InitList

void LocateElem(SqList L)
{
ElemType e;
int j;
//在顺序表L中查找第一个值与e相等的元素,若存在输出该元素的位置,若不存在,输出所找的元素不存在
j = 0; //j的初值为第一个元素的位序
cout << "请输入要查找的元素:";
cin >> e;
while(j < L.length && L.elem[j] != e)

++j; //依次进行判定
if(j < L.length) cout << "所找元素的位置为:" << j + 1; //找到满足判定条件的数据元素为第j个元素
else cout << "所找的元素不存在"; //该线性表中不存在满足判定的数据元素
cout << ‘\n‘;
system("pause");
}//LocateElem

void ListInsert(SqList &L)
{
int j;
int pos;
ElemType e;
cout << "请输入所要插入的位置及元素:";
cin >> pos >>e;
//若存储空间不满且1 <= pos <= Listlength(L) + 1,则在顺序表L的第pos个元素之前插入元素e,输出插入元素后的顺序表
if(pos < 1 || pos > L.length + 1)
{
cout << "插入位置不合法" << ‘\n‘; //插入位置不合法
system("pause");
return;
}
if(L.length >= L.listsize)
{
cout << "当前存储空间已满,无法插入,请重新选择顺序表功能" << ‘\n‘; //当前存储空间已满,无法插入
system("pause");
return;
}
for(j = L.length - 1; j >= pos - 1; --j)
L.elem[j + 1] = L.elem[j]; //插入位置之后的元素右移
L.elem[pos - 1] = e; //插入e
++L.length; //表长增1
cout << "插入后的顺序表:";
for (j = 0; j < L.length; j++)
{
cout << L.elem[j] << ‘ ‘;
}
cout << ‘\n‘;
system("pause");
}//ListInsert

void ListDelete(SqList &L)
{
int j;
int pos;
cout << "请输入所要删除元素的位置: ";
cin >> pos;
//若1 <= pos <= Listlength(L).则在顺序表L中删除第pos个元素,输出删除后的顺序表
if(pos < 1 || pos > L.length)
{
cout << "删除位置不合法\n"; //删除位置不合法
system("pause");
return;
}
for(j = pos; j < L.length; ++j)
L.elem[j - 1] = L.elem[j]; ///被删除元素之后的元素左移
--L.length; //表长减1
cout << "删除后的顺序表:";
for (j = 0; j < L.length; j++)
{
cout << L.elem[j] << ‘ ‘;
}
cout << ‘\n‘;
system("pause");
}//ListDelete

void DestroyList(SqList &L)
{
//释放顺序表L所占存储空间
delete[] L.elem;
L.listsize = 0;
L.length = 0;
cout << "顺序表已销毁" << ‘\n‘;
system("pause");
}//DestroyList_Sq

void ListLength(SqList L)
{
cout << "表长为:" << L.length << ‘\n‘;
system("pause");
}

void ListEmpty(SqList L)
{
if(L.length == 0)
cout << "该顺序表为空" << ‘\n‘;
else
cout << "该顺序表不为空" << ‘\n‘;
system("pause");
}

void GetElem(SqList L)
{
int j;
cout << "取出顺序表元素的位置:";
cin >> j;
if(j < 1 || j > L.length)
{
cout << "取出位置不合法" << ‘\n‘; //取出位置不合法
system("pause");
return;
}
cout << "取出的元素为:" << L.elem[j - 1] << ‘\n‘;
system("pause");
}
void MergeList_Sq()
{
//输入有序顺序表La,Lb.归并为Lc.输出Lc
SqList La; SqList Lb; SqList Lc;
int i, j, k; int maxsize;
maxsize = MAXLISTSIZE;
La.elem = new ElemType[maxsize];
Lb.elem = new ElemType[maxsize];
Lc.elem = new ElemType[maxsize];
if(!La.elem || !Lb.elem || !Lc.elem) exit(1); //储存分配失败
cout << "请输入顺序表La的长度: ";
cin >> La.length;
La.listsize = maxsize; //该顺序表可以存储元素的最大容量
cout << "请输入顺序表的元素: ";
for (j = 0; j < La.length; j++)
{
cin >> La.elem[j];
}
cout << "请输入顺序表Lb的长度: ";
cin >> Lb.length;
Lb.listsize = maxsize; //该顺序表可以存储元素的最大容量
cout << "请输入顺序表的元素: ";
for (j = 0; j < Lb.length; j++)
{
cin >> Lb.elem[j];
}
Lc.listsize = Lc.length = La.length + Lb.length;

for(i = 0, j = 0, k = 0; i < La.length && j < Lb.length; k++)
if(La.elem[i] <= Lb.elem[j])
{
Lc.elem[k] = La.elem[i];
i++;
}
else
{
Lc.elem[k] = Lb.elem[j];
j++;
}
while(i < La.length)
{
Lc.elem[k] = La.elem[i];
i++, k++;
} //插入La的剩余元素
while(j < Lb.length)
{
Lc.elem[k] = Lb.elem[j];
j++, k++;
} //插入Lb的剩余元素
cout << "合并后的顺序表Lc为:";
for (j = 0; j < Lc.length; j++)
{
cout << Lc.elem[j] << ‘ ‘;
}
cout << ‘\n‘;
system("pause");
}//MergeList_Sq

时间: 2024-07-28 18:41:48

数据结构之顺序表(C++版)的相关文章

数据结构。顺序表

#include <stdio.h>#include <stdlib.h> #define LIST_INIT_SIZE 100#define LIST_INCREMENT 10typedef struct Point   //element type{    int x;    int y;}Point;typedef Point ElemType;typedef struct          //list type{    ElemType *elem;     //data

Windows 已在 数据结构_顺序表.exe 中触发一个断点——new和delete注意事项

实现数据结构的顺序表的类时,输入,改,删,查都可以,但是最后析构函数时持续出错 错误提示"Windows 已在 数据结构_顺序表.exe 中触发一个断点" int *elem=new int(LIST_INIT_SIZE); if(!elem)cout<<"overflow"<<endl; if(leng>LIST_INIT_SIZE) cout<<"error"; else {    length=le

数据结构学习---顺序表

在准备考研的时候就想发学习笔记,想来已经过了多时.现在在培训班又要展开学习,说明一件事:408是指导学习研究计算机的基础!对于编写程序而言,数据结构与算法,是关键!我想其他的组成原理,计算机网络,操作系统也很重要,这是一个system,有必要有需要学习认真的学习之.希望这个是好的开始! ---------------------------------------------------------------- 昨天晚上看浙大在网易云课上的视频,没有上过浙大的我还是非常激动,哈哈,三个短视频看

数据结构之顺序表

好不容易linux的课程结束了,下面就进入了数据结构的课程,对于没学过这本书的我,只能弱弱的说一句,数据结构真的好难,在学习的过程中,觉得最经典的一句话便是,数据结构+算法=程序.我只想说理解数据结构真的好难,太富有逻辑性了,有时候真的还需要发挥自己的空间想象能力,几天的学习,其实还算可以吧,下面我就给大家写一点线性表的基本操作吧,我尽可能的讲解的清楚一些,方便看的人有兴趣能有自己实现. #include <stdio.h> #include <stdlib.h> #include

C++的标准模板库STL中实现的数据结构之顺序表vector的分析与使用

摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解.即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第一篇,主要针对线性表中的顺序表(动态数组)STL vector进行分析和总结. 引言 因为前段时间对台大的机器学习基石和技法课程进行了学习,发如今详细的实现中经常涉及到各种类型的数据结构,比方线性表.二叉树.图等,在使用这些数据结构时感到有些吃力.主要是对一些主要的数据结构理解的不够.所以趁着暑假假期.近期一段时间总会抽出时间复习一

【数据结构】顺序表和链表

一.顺序表 顺序表定义 :顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素.使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表.顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中. 顺序表可以分为静态顺序表和动态顺序表,静态较为简单,本文提供全部动态顺序表基本操作的代码. 顺序表的基本操作:

数据结构复习---顺序表和单链表

1.前言: 最近比较浮躁,想学习一门新的技术却总是浅尝辄止,遇到不懂的地方就想跳过去,时间长了,心态就有点崩了.静下心来,去喝了几碗心灵鸡汤.鸡汤博主感动到了我:"无专注,无风景.不要太贪心,一次只做一件事,而且只做最重要的事.".于是乎,我把家里翻了个底朝天,找到了我垫在床底下的<数据结构>这本书,觉得自己是时候静下心来好好复习一下基础了.今天刚看到顺序表和链表,把我的学习心得记录在这里.也希望自己能坚持,老老实实的把这本书复习完. 2.数据结构的重要性: 讲一门知识之前

javascript数据结构之顺序表

关于线性表的概念这里就不赘述了,可以自行百度和查阅资料,线性表按照存储(物理)结构分为顺序存储和链式存储,每种存储方式的不同决定了它的实现代码是不同的: 顺序存储的特点就是在内存中选一块连续的地址空间,然后将线性表放入其中,这样做便于线性表的存取,但是不利于插入和删除,而且在事先无法确定线性表长度的前提下可能会造成内存浪费或溢出. 这篇我是用javascript来实现线性表中的顺序表. 下面上代码: 1 var orderList = function(){ 2 var items = [];

数据结构:顺序表的基本操作

顺序表作业: #include <iostream> #include <cstdio> #include <cstdlib> using namespace std; typedef int T; class SeqList{ private: T *data; int MaxSize; ///顺序表最多可以存放的元素个数. int last; ///顺序表最后一个元素的下标,初始值为-1. public: SeqList(int sz); void Input();