<span style="font-size:18px;"><strong>#pragma once
#include <iostream>
using namespace std; typedef enum { FALSE, TRUE }Status; template<class Type>
class SeqList
{
public:
SeqList(int sz = DefaultSize)
{
capacity = sz > DefaultSize ? sz : DefaultSize;
base = new Type[capacity];
size = 0;
}
~SeqList()
{
destroy();
/* delete []base;
base = NULL;
capacity = size = 0;*/
}
public:
Status Inc()
{
Type *newbase = new Type[capacity + INC_SIZE];
if (newbase == NULL)
{
return FALSE;
}
memcpy(newbase, base, sizeof(Type)*size);
delete[]base;
base = newbase;
capacity += INC_SIZE;
return TRUE;
}
Status merge(SeqList<Type> <1, SeqList<Type> <2)
{
int i = 0;
int j = 0;
int k = 0;
while (i < lt1.size && j < lt2.size)
{
if (lt1.base[i] > lt2.base[j])
{
base[k++] = lt2.base[j++];
}
else
{
base[k++] = lt1.base[i++];
}
}
while(i < lt1.size)
{
base[k++] = lt1.base[i++];
}
while (j < lt2.size)
{
base[k++] = lt2.base[j++];
}
size = lt1.size + lt2.size;
return TRUE;
}
Status IsFull() const
{
if (size >= capacity)
{
return TRUE;
}
else
{
return FALSE;
}
}
Status Empty() const
{
if (size == 0)
{
return TRUE;
}
else
{
return FALSE;
}
}
Status push_back(const Type& x)
{
if (IsFull() && !Inc())
{
cout << "IsFull!不能尾插" << x << endl;
return FALSE;
}
base[size++] = x;
return TRUE;
}
Status push_front(const Type& x)
{
if (IsFull() && !Inc())
{
cout << "IsFull!不能头插" << x << endl;
return FALSE;
}
for (int i = size; i > 0; --i)
{
base[i] = base[i - 1];
}
base[0] = x;
size++;
return TRUE;
}
Status pop_back()
{
if (Empty())
{
cout << "Empty!不能尾删" << endl;
return FALSE;
}
size--;
return TRUE;
}
Status pop_front()
{
if (Empty())
{
cout << "Empty!不能头删" << endl;
return FALSE;
}
for (int i = 0; i < size; ++i)
{
base[i] = base[i + 1];
}
size--;
return TRUE;
}
Status insert_val(const Type& x)
{
if (IsFull() && !Inc())
{
cout << "IsFull!不能按值插入" << x << endl;
return FALSE;
}
int i = 0;
while (base[i] < x && i < size)
{
i++;
}
insert_pos(i, x);
return TRUE;
}
Status insert_pos(int pos, const Type& x)
{
if (IsFull() && !Inc())
{
cout << "IsFull! 不能按位置插入" << endl;
return FALSE;
}
if (pos < 0 || pos > size)
{
return FALSE;
}
for (int i = 0; i < size; ++i)
{
if (i == pos)
{
for (int j = size; j > i; --j)
{
base[j] = base[j - 1];
}
}
}
base[pos] = x;
size++;
return TRUE;
}
int find(const Type& x)
{
if (size == 0)
{
return -1;
}
for (int i = 0; i < size; ++i)
{
if (base[i] == x)
{
return i;
}
}
}
Status delete_pos(int pos)
{
if (pos < 0 || pos > size)
{
return FALSE;
}
for (int i = 0; i < size; ++i)
{
if (i == pos)
{
for (int j = i; j < size; ++j)
{
base[j] = base[j + 1];
}
break;
}
}
size--;
return TRUE;
}
Status delete_val(const Type& x)
{
int key = find(x);
if (key == -1)
{
return FALSE;
}
delete_pos(key);
return TRUE;
/*if(Empty())
{
cout << "Empty!" << endl;
return FALSE;
}
for(int i = 0; i < size; ++i)
{
if(base[i] == x)
{
for(int j = i; j < size; ++j)
{
base[j] = base[j+1];
}
break;
}
}
size--;
return TRUE;*/
}
void sort()
{
if (size == 0 || size == 1)
{
return;
}
for (int i = 0; i < size - 1; ++i)
{
for (int j = 0; j < size - i - 1; ++j)
{
if (base[j] > base[j + 1])
{
int tmp = base[j];
base[j] = base[j + 1];
base[j + 1] = tmp;
}
}
}
}
void resver()
{
if (size == 0 || size == 1)
{
return;
}
for (int i = 0, j = size - 1; i < j; ++i, --j)
{
int tmp = base[i];
base[i] = base[j];
base[j] = tmp;
}
}
int length()
{
return size;
}
void clear()
{
size = 0;
}
Status destroy()
{
if (base == NULL)
{
return FALSE;
}
delete[]base;
base = NULL;
size = capacity = 0;
return TRUE;
}
Status modify_val(const Type& x, const Type& y)
{
int key = find(x);
if (key == -1)
{
return FALSE;
}
modify_pos(key, y);
return TRUE;
}
Status modify_pos(int pos, const Type& x)
{
if (pos < 0 || pos > size)
{
return FALSE;
}
for (int i = 0; i < size; ++i)
{
if (i == pos)
{
base[i] = x;
}
}
return TRUE;
}
void show_list()
{
for (int i = 0; i < size; ++i)
{
cout << base[i] << ' ';
}
cout << endl;
}
private:
enum {DefaultSize = 20, INC_SIZE = 3};
Type *base;
int capacity;
int size;
};</strong></span>



<span style="font-size:18px;"><strong>#include "SeqList.h"

void main()
{
SeqList<int> It1;
SeqList<int> It2;
SeqList<int> mylist; int select = 1;
int pos;
int item;
system("Color 0d");
while (select)
{
cout << "************************************" << endl;
cout << "* [0] quit_system [1] push_back *" << endl;
cout << "* [2] push_front [3] show_list *" << endl;
cout << "* [4] pop_back [5] pop_front *" << endl;
cout << "* [6] insert_val [7] insert_pos *" << endl;
cout << "* [8] find [9] delete_pos *" << endl;
cout << "* [10] delete_val [11] sort *" << endl;
cout << "* [12] resver [13] length *" << endl;
cout << "* [14] clear [15] destroy *" << endl;
cout << "* [16] modify_val [17] modify_pos *" << endl;
cout << "* [18] merge *" << endl;
cout << "************************************" << 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:
system("cls");
mylist.show_list();
system("pause");
break;
case 4:
mylist.pop_back();
break;
case 5:
mylist.pop_front();
break;
case 6:
cout << "请输入要插入的值:>";
cin >> item;
mylist.insert_val(item);
break;
case 7:
cout << "请输入要插入的值的下标:>";
cin >> pos;
cout << "请输入要插入的值";
cin >> item;
mylist.insert_pos(pos, item);
break;
case 8:
cout << "请输入要查找的值:>";
cin >> item;
cout << "该值下标为:" << mylist.find(item) << endl;
break;
case 9:
cout << "请输入要删除的值的下标:>";
cin >> item;
mylist.delete_pos(item);
break;
case 10:
cout << "请输入要删除的值:>";
cin >> item;
mylist.delete_val(item);
break;
case 11:
mylist.sort();
break;
case 12:
mylist.resver();
break;
case 13:
cout << "线性表的长度为:" << mylist.length() << endl;
break;
case 14:
mylist.clear();
break;
case 15:
mylist.destroy();
break;
case 16:
cout << "请输入要改动的值:>";
cin >> item;
cout << "请输入改动后的值:>";
cin >> pos;
mylist.modify_val(item, pos);
break;
case 17:
cout << "请输入要改动的值的下标:>";
cin >> pos;
cout << "请输入改动后的值:>";
cin >> item;
mylist.modify_pos(pos, item);
break;
case 18:
for (int i = 1; i < 10; i += 2)
{
It1.push_back(i);
}
for (int i = 2; i <= 10; i += 2)
{
It2.push_back(i);
}
mylist.merge(It1, It2);
mylist.show_list();
default:
break;
}
}
} </strong></span>



执行结果例如以下:

【C++/数据结构】顺序表的基本操作的更多相关文章

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

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

  2. 顺序表的基本操作【c语言】【创建、插入、删除、输出】

    作为数据结构初学者,上课时对一些知识点掌握得不是很透彻,所以利用课余时间通过微博平台总结所学知识,加深对知识的见解,记录学习历程便于后需要时参考. #include<stdio.h> #i ...

  3. hrbust-1545-基础数据结构——顺序表(2)

    http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1545 基础数据结构——顺序表(2) ...

  4. 顺序表的基本操作(C)

    在顺序存储结构实现基本操作:初始化.创建.插入.删除.查找.遍历.逆置.合并运算. 运行示例: 请输入线性表La的长度: 请输入线性表La中的元素(共5个) *** 此时线性表La中的元素 *** * ...

  5. 数据结构---顺序表(C++)

    顺序表 是用一段地址连续的存储单元依次存储线性表的数据元素. 通常用一维数组来实现 基本操作: 初始化 销毁 求长 按位查找 按值查找 插入元素 删除位置i的元素 判空操作 遍历操作 示例代码: // ...

  6. 顺序表及基本操作(C语言)

    #include <stdio.h> #include <stdlib.h> //基本操作函数用到的状态码 #define TRUE 1; #define FALSE 0; # ...

  7. c数据结构 顺序表和链表 相关操作

    编译器:vs2013 内容: #include "stdafx.h"#include<stdio.h>#include<malloc.h>#include& ...

  8. 数据结构顺序表删除所有特定元素x

    顺序表类定义: template<class T> class SeqList : { public: SeqList(int mSize); ~SeqList() { delete[] ...

  9. 数据结构顺序表Java实现

    Java实现顺序表算法:1:首先我们需要定义我们的接口,关于顺序表的一些基本的操作:顺序表中的操作都有增删改查. //List接口 public interface IList { //返回线性表的大 ...

  10. python算法与数据结构-顺序表(37)

    1.顺序表介绍 顺序表是最简单的一种线性结构,逻辑上相邻的数据在计算机内的存储位置也是相邻的,可以快速定位第几个元素,中间不允许有空,所以插入.删除时需要移动大量元素.顺序表可以分配一段连续的存储空间 ...

随机推荐

  1. RabbitMQ 官方NET教程(二)【工作队列】

    这篇中我们将会创建一个工作队列用来在工作者(consumer)间分发耗时任务. 工作队列的主要任务是:避免立刻执行资源密集型任务和避免必须等待其完成.相反地,我们进行任务调度:我们把任务封装为消息发送 ...

  2. 前端Canvas思维导图笔记

    看不清的朋友右键保存或者新窗口打开哦!喜欢我可以关注我,还有更多前端思维导图笔记

  3. Sql语句优化-查询两表不同行NOT IN、NOT EXISTS、连接查询Left Join

    在实际开发中,我们往往需要比较两个或多个表数据的差别,比较那些数据相同那些数据不相同,这时我们有一下三种方法可以使用:1. IN或NOT IN,2. EXIST或NOTEXIST,3.使用连接查询(i ...

  4. Inception搭建

    Inception安装Inception是集审核.执行.回滚于一体的一个自动化运维系统,它是根据MySQL代码修改过来的,用它可以很明确的,详细的,准确的审核MySQL的SQL语句,它的工作模式和My ...

  5. sphinx在windows下的简单安装与使用

    1.下载地址 http://sphinxsearch.com/downloads/release/,我这里下的是“Win64 binaries w/MySQL+PgSQL+libstemmer+id6 ...

  6. ROS:ubuntu-Ros使用OrbSLAM

    一般无误的官方连接:https://github.com/raulmur/ORB_SLAM ubuntu16.04没有多少改变,还是使用kinetic老代替indigo Related Publica ...

  7. Arduino 控制超声波测距模块

    一.实物图 二.例子代码 用到数字2 和3 引脚,还有两个就是vcc GND两个阴脚,用模块连线比较简单

  8. Markdown 常用语法总结

    注意:Markdown使用#.+.*等符号来标记,符号后面必须跟上至少跟上 1个空格才有效! Markdown的常用语法 标题 Markdown标题支持两种形式. 1.用#标记 在标题开头加上1~6个 ...

  9. 【转载】Java 反射详解

    目录 1.什么是反射? 2.反射能做什么? 3.反射的具体实现 4.根据反射获取父类属性 4.反射总结 反射反射,程序员的快乐! 1.什么是反射? Java反射就是在运行状态中,对于任意一个类,都能够 ...

  10. Python 切片 day3

    你可以处理列表的部分元素——Python称之为切片 . 一.使用方法: 要创建切片,可指定要使用的第一个元素和最后一个元素的索引. 与函数range() 一样,Python在到达你指定的第二个索引前面 ...