SeqList.h

#ifndef SEQLIST_H
#define SEQLIST_H
#include<iostream>
using namespace std; typedef enum{TRUE,FALSE}Status;
template<class Type>
class SeqList
{
private:
enum{DefaultSize = 10}; //顺序表的默认长度
Type *base; //存放元素数组的首地址
int capacity; //顺序表的容量
int size; //顺序表实际存放元素的个数
private://为内部函数所调用,不希望在类外訪问
bool IsFull()
{
if (size == capacity)
return true;
else
return false;
}
bool IsEmpty()
{
if (size == 0)
return true;
else
return false;
}
Status destory()
{
if (base == NULL)
return FALSE;
delete[] base;
base = NULL;
capacity = size = 0;
return TRUE;
}
public:
SeqList(int sz = DefaultSize)
{
capacity = sz > capacity ? sz : capacity;
base = new Type[capacity];
size = 0;
}
~SeqList()
{
destory();
}
Status push_back(const Type &x)
{
if (IsFull())
{
cout << "空间已满" << x << "不能插入" << endl;
return FALSE;
}
base[size++] = x;
return TRUE;
}
Status push_front(const Type &x)
{
if (IsFull())
{
cout << "空间已满" << x << "不能插入" << endl;
return FALSE;
}
for (int i = size - 1; i >= 0; --i) //------------------>从最后一个元素到第一个元素依次往后移动一个位置
base[i+ 1] = base[i];
base[0] = x;
size++;
return FALSE;
}
void show_list()
{
for (int i = 0; i < size; ++i)
cout << base[i] << " ";
cout << endl;
}
Status pop_back(Type &x)//将删除的元素存放在x中,以备不时之需
{
if (IsEmpty())
{ cout << "空间已空,不能删除" << endl;
return FALSE;
}
x = base[--size];
return TRUE;
}
Status pop_front(Type &x)
{
if (IsEmpty())
{
cout << "空间已空。不能删除" << endl;
return FALSE;
}
x = base[0];//将删除的元素保存在x中,以备不时之需
for (int i = 1; i <= size - 1; ++i) //--------------->从第二个元素到最后一个元素,依次覆盖前一个元素
base[i - 1] = base[i];
size--;
return TRUE;
}
Status insert_pos(int pos,const Type &x)
{
if (pos < 0 || pos >= size)
{
cout << "插入位置无效" << endl;
return FALSE;
}
if (IsFull())
{
cout << "空间已满" << x << "不能插入" << endl;
return FALSE;
}
for (int i = size - 1; i >= pos; --i)//--------------->从最后一个元素到所插入的位置的元素依次往后移动一个位置,为所要插入的元素留出位置
base[i + 1] = base[i];
base[pos] = x;
size++;
return TRUE;
}
Status delete_pos(int pos,Type &x)
{
if (pos < 0 || pos >= size)
{
cout << "删除位置无效" << endl;
return FALSE;
}
if (IsEmpty())
{
cout << "空间已空,不能删除" << endl;
return FALSE;
}
x = base[pos];
for (int i = pos + 1; i < size; ++i)//从删除位置后面的第一个元素開始依次覆盖前一个元素
base[i - 1] = base[i];
size--;
return TRUE;
}
int find(const Type &x)
{
for (int i = 0; i < size; ++i)
{
if (base[i] == x)
return i;
}
return -1;
}
void sort()//冒泡排序
{
for (int i = 0; i < size - 1; ++i)//排序size-1次
{
for (int j = 0; j < size - 1 - i; ++j)
{
if (base[j] > base[j + 1])
{
Type tmp = base[j];
base[j] = base[j + 1];
base[j + 1] = tmp;
}
}
} }
void reserve()//左右对称位置交换
{
int left = 0;
int right = size - 1;
while (left < right)
{
Type tmp = base[left];
base[left] = base[right];
base[right] = tmp;
left++;
right--;
}
}
Status insert_val(const Type &x)
{
if (IsFull())
{
cout << "空间已满" << x << "不能按值插入" << endl;
return FALSE;
}
sort();
for (int i = 0; i < size; ++i)
{
if (base[i] > x)//存在比所要插入元素大的元素,在该位置插入它
{
insert_pos(i, x);
return TRUE;
}
}
base[size++] = x;//不存在比所要插入元素大的元素,在最后位置插入它
return TRUE;
}
/*
Status insert_val(const Type &x)//用while取代for
{
if (IsFull())
{
cout << "空间已满" << x << "不能按值插入" << endl;
return FALSE;
}
sort();
int i = 0;
while(i<size && x > base[i])
{
i++;
}
insert_pos(i,x);
return TRUE;
}
*/
Status delete_val(const Type &x)
{
int n = find(x);
if (n == -1)
{
cout <<x<< "不存在,无法删除" << endl;
return FALSE;
}
Type item;
delete_pos(n, item);
return TRUE;
}
void clear()
{
size = 0;
}
};
#endif

main.cpp

#include"SeqList.h"

int main()
{
SeqList<int> mylist;
int item;
int n;
int select = 1;
while (select)
{
cout << "*************************************** *" << endl;
cout << "*[1] push_back [2] push_front *" << endl;
cout << "*[3] show_list [4] pop_back *" << endl;
cout << "*[5] pop_front [6] insert_val *" << endl;
cout << "*[7] insert_pos [8] find *" << endl;
cout << "*[9] delete_pos [10] delete_val*" << endl;
cout << "*[11] sort [12] reserve *" << endl;
cout << "*[13] destory [14] clear *" << endl;
cout << "*[0] quit_system [0] quit_system*" << endl;
cout << "请选择:>";
cin >> select;
switch (select)
{
case 1:
cout << "请输入要插入的元素(-1结束):>";
while (cin >> item, item != -1)
{
mylist.push_back(item);
}
break;
case 2:
cout << "请输入要插入的元素(-1结束):>";
while (cin >> item, item != -1)
{
mylist.push_front(item);
}
break;
case 3:
mylist.show_list();
break;
case 4:
mylist.pop_back(item);
break;
case 5:
mylist.pop_front(item);
break;
case 6:
cout << "请输入要插入的元素:";
cin >> item;
mylist.insert_val(item);
break;
case 7:
cout << "请输入要插入的位置:";
cin >> n;
cout << "请输入要插入的元素:";
cin >> item;
mylist.insert_pos(n,item);
break;
case 8:
cout << "请输入要查找的元素:";
cin >> item;
cout << mylist.find(item) << endl;
break;
case 9:
cout << "请输入要删除的位置:";
cin >> n;
mylist.delete_pos(n,item);
break;
case 10:
cout << "请输入要删除的元素:";
cin >> item;
mylist.delete_val(item);
break;
case 11:
mylist.sort();
break;
case 12:
mylist.reserve();
break;
case 14:
mylist.clear();
break;
default:
break;
}
}
system("pause");
return 0;
}

【c++版数据结构】之顺序表的实现的更多相关文章

  1. hrbustoj 1545:基础数据结构——顺序表(2)(数据结构,顺序表的实现及基本操作,入门题)

    基础数据结构——顺序表(2) Time Limit: 1000 MS    Memory Limit: 10240 K Total Submit: 355(143 users) Total Accep ...

  2. [Python] 数据结构--实现顺序表、链表、栈和队列

    说明: 本文主要展示Python实现的几种常用数据结构:顺序表.链表.栈和队列. 附有实现代码. 来源主要参考网络文章. 一.顺序表 1.顺序表的结构 一个顺序表的完整信息包括两部分,一部分是表中元素 ...

  3. 数据结构:顺序表(python版)

    顺序表python版的实现(部分功能未实现) #!/usr/bin/env python # -*- coding:utf-8 -*- class SeqList(object): def __ini ...

  4. 【PHP数据结构】顺序表(数组)的相关逻辑操作

    在定义好了物理结构,也就是存储结构之后,我们就需要对这个存储结构进行一系列的逻辑操作.在这里,我们就从顺序表入手,因为这个结构非常简单,就是我们最常用的数组.那么针对数组,我们通常都会有哪些操作呢? ...

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

    摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解.即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第一篇,主要针对线性表中的顺序表(动 ...

  6. [数据结构]C#顺序表的实现

    在数据结构的学习当中,想必C++可能是大家接触最多的入门语言了 但是C#的数据结构却很少看到,今天我写了一个C#顺序表的顺序存储结构 顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是 ...

  7. 数据结构之顺序表,c#实现

    using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using S ...

  8. 数据结构4:顺序表(线性表的顺序存储结构)及C语言实现

    逻辑结构上呈线性分布的数据元素在实际的物理存储结构中也同样相互之间紧挨着,这种存储结构称为线性表的顺序存储结构. 也就是说,逻辑上具有线性关系的数据按照前后的次序全部存储在一整块连续的内存空间中,之间 ...

  9. Java——数据结构(顺序表)

    这是一个顺序表的类,初始化的时候就已经确定了表的长度,之后不能添加数据,因为使用的是数组存储的数据,不过这个表的类型是泛型的. public class List { private Object[] ...

  10. javascript数据结构之顺序表

    关于线性表的概念这里就不赘述了,可以自行百度和查阅资料,线性表按照存储(物理)结构分为顺序存储和链式存储,每种存储方式的不同决定了它的实现代码是不同的: 顺序存储的特点就是在内存中选一块连续的地址空间 ...

随机推荐

  1. Linux平台Oracle多个实例启动说明

    环境说明:oracle实例1的SID为orcl(为默认启动的实例),第二个实例的SID为orcl2 启动步骤:  1)启动数据库实例完成后,启动数据库监听服务 #lsnrctl   start 2)切 ...

  2. 剑指offer——01二维数组中的查找(Python3)

    题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...

  3. 6 ZigZig Conversion[M]Z字形变换

    题目 The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows li ...

  4. vue.js的学习之路

    因为对jquery的ajax渲染很不满,所以我就来学vue.js了 1)vue.js是什么 官方解释为:Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型 ...

  5. Bata版本

    一.团队成员 1)冯鹏(组长) 201731062617 2)鲜泽   201731062612 3)李家豪 201731062614 4)郭经伟 201731062615 5)程前勇 2017310 ...

  6. Route学习笔记

    前言 UrlRoutingModule.class:这块的代码关联了上一篇中路由部分的一个详细说明 一:Route的讲解 1. 路由模板匹配 添加路由: MapRoute 剔除的路由:IgnoreRo ...

  7. Vue.js 2.x Development Build With Hot Reloading For External Server (using Webpack template)

    This article assuming you created your project using webpack template. vue init webpack <PROJECT_ ...

  8. Android7.0打开sdacrd图片问题

    1.点击item,通过intent打开指定路径的图片. 2.测试6.0,5.0正常运行代码: File file=new File(item.address): Intent intent = new ...

  9. Type system-Type checking

    类型系统的属性: 1.结构属性: 2.规则属性:类型系统定义了一套规则(内部数据的访问规则.函数的访问规则.类型的比较与转化规则),以供编译和运行时进行检查. In programming langu ...

  10. 关于C++程序运行程序是出现的this application has requested the runtime to terminate it in an unusual way. 异常分析

    今天运行程序是出现了this application has requested the runtime  to terminate it in an unusual way. 的异常报告,以前也经常 ...