C++数据结构实验报告:顺序表实现
来源:互联网 发布:馆陶县行知教育集团 编辑:程序博客网 时间:2024/06/05 00:37
一,顺序表的作用
线性结构的基本特征为:
1.集合中必存在唯一的一个“第一元素”
2.集合中必存在唯一的一个 “最后元素”
3.除最后一个元素之外,均有 唯一的后继(后件)
4.除第一个元素之外,均有 唯一的前驱(前件) 由n(n≥0)个数据元素(结点)a1,a2,…,an组成的有限序列。数据元素的个数n定义为表的长度。当n=0时称为空表。常常将非空的线性表(n>0)记作:(a1,a2,…an) 数据元素ai(1≤i≤n)只是一个抽象的符号,其具体含义在不同的情况下可以不同。
线性表的基本操作
1)Setnull(L) 置空表
2)Length(L) 求表长度;求表中元素个数
3)Get(L,i) 取表中第i个元素(1≤i≤n)
4)Prior(L,i) 取i的前趋元素
5)Next(L,i) 取i的后继元素
6)Locate(L,x) 返回指定元素在表中的位置
7)Insert(L,i,x)插入元素
8)Delete(L,x) 删除元素
9)Empty(L) 判别表是否为空
-----------------------------------------------------
二,顺序表代码
//
// main.cpp
// 线性表的顺序存储结构
//
// Created by 梁华建 on 2017/9/14.
// Copyright © 2017年梁华建. All rights reserved.
//
#include <iostream>
//定义常量MaxSize不一定要100,代表的是数组的存储数量
const int MaxSize=100;
template <class DataType>
class SeqList {
public:
SeqList(){length=0;}//无参构造函数空的顺序表
SeqList(DataType a[],int n);//有参构造函数,建立一个长度为n的顺序表
~SeqList(){}//析构函数为空
int Length(){returnlength;}//求线性表的长度
DataType Get(int i);//按位查找,在线性表中查找第i个元素
int Locate(DataType x);//按值查找,在线性表中查找值位x的元素序号
void Insert(int i,DataType x);//插入操作,在线性表中第i个位置插入值为x的元素
DataType Delete(int i);//删除操作,删除线性表的第i个元素
void PrintList();//遍历操作,按序号依次输出各元素
private:
DataType data[MaxSize];//存放数据元素的数组
int length;
};
//有参构造函数实现
template <class DataType>
SeqList<DataType>::SeqList(DataType a[],int n)
{
if (n>MaxSize)throw"参数非法";
for (int i=0; i<n; i++)
data[i]=a[i];
length=n;
}
//getter函数的实现获得i的位置
template <class DataType>
DataType SeqList<DataType>::Get(int i)
{
if (i<1&&i>length)
throw"查找位置非法";
returndata[i-1];
}
//查找函数找到数据的下标位置
template<class DataType>
int SeqList<DataType>::Locate(DataType x)
{
for (int i=0; i<length; i++)
if (data[i]==x)return i+1;//找到之后返回下标
return0;//退出循环说明查找失败
}
//插入函数插入一个数据元素到列表中
template <class DataType>
void SeqList<DataType>::Insert(int i, DataType x)
{
if (length>=MaxSize)throw "上溢出";
if (i<1||i>length+1)throw "插入位置错误";
for (int j=length; j>=i; j--)//插入后后面的对象后移一个单位
data[j]=data[j-1];
data[i-1]=x;
length++;//列表加一
}
//删除函数删除一个数据元素从列表中
template <class DataType>
DataType SeqList<DataType>::Delete(int i)
{
if (length<=0)throw "下溢出";
if (i<1||i>length+1)throw "删除位置错误";
DataType x=data[i-1];//需要删除的元素
for (int j=i; j<=i; j--)
data[j-1]=data[j];
length--;
return x;
}
//遍历函数按下标依次输入各元素
template <class DataType>
void SeqList<DataType>::PrintList()
{
for (int i=0; i<length; i++) {
std::cout<<"第个数"<<i<<"值为"<<data[i]<<" ";
}
}
-----------------------------------------------------
三,出现的问题和代码缺点
问题:完成该代码的时候要有较清晰的for使用思路,不然很容易混淆,删除和插入函数的思路差不多,还有每次要想好数据输入可能出现的问题,当输入数据上溢或者下溢的时候应该throw出错误而不是代码崩掉.保证算法的鲁棒性。
缺点:
1,每次插入或者删除都要移动大量数据
2,表的容量难以确定
3,造成存储空间的碎片,数组要去连续的存储空间 如果不连续则不能使用
-------------------------------------------------------
四,编写main函数测试
main函数中调用student测试函数
当数组的数大于定义的maxsize就会报错
- C++数据结构实验报告:顺序表实现
- C语言数据结构实现顺序表增删改差(数据结构第一次实验)
- 数据结构---顺序表c实现
- 顺序表--数据结构实验
- 数据结构顺序表实验
- 【数据结构C实现】1.顺序表实现
- 实验一:顺序表实验报告
- 数据结构链式表实验报告
- 数据结构实验1-线性表的顺序实现
- C语言实现数据结构中的顺序表
- 数据结构(C++)顺序表的实现
- 数据结构的C实现_顺序表
- 数据结构---队列顺序表c实现
- 数据结构---栈顺序表c实现
- c语言实现数据结构顺序表源代码
- 数据结构C语言实现之顺序表
- 数据结构(C实现)------- 顺序表
- 数据结构--顺序表c语言实现
- jQuery模拟下拉选
- Spring的七大模块简介
- Understanding LSTM Networks
- 15213-BombLab 备忘
- Codeforces Round #435 (Div. 2) C. Mahmoud and Ehab and the xor
- C++数据结构实验报告:顺序表实现
- 1203:单词分割
- 记录json解析
- 表单标签
- Divide and Conquer -- Leetcode problem53. Maximum Subarray
- FreeRTOS 任务挂起和恢复
- 郵便実装
- 微服务架构特点
- MySQL备份之mysqldump工具--lock-all-tables