C++之顺序列表(栈/队列等)ADT

#include<iostream>
using namespace std;

//ADT
template<class T>
class SeqList{
    public:
        //构造函数
        SeqList() { this->length = 0; this->data = NULL; }
        SeqList(int length);
        SeqList(int length,T array[]);

        //增
        int push(T data);//入(栈/队),并返回新数组的长度
        int unshift(T data);//类似于队列,从队头入,并返回新数组的长度 

        //删除
        T pop();//出栈,并返回元素值
        T shift();//出队,并返回该处元素值

        //查
        int Length();    //返回数组长度
        bool includes(T data); //查询数组中是否存在该元素
        int indexOf(T data);//返回该值的下标
        T valueOf(int index);//返回下标对应的值

        //(修)改
        T replaceValueOf(int index);//按照下标替换值,并返回该处原来的值
        int replaceIndexOf(T data);//按照 

        //排序
        void sort();//默认升序排列
        void sort(int TYPE);//0:升序,1逆序 

        //逆序
        void reverse();        

        ~SeqList();
    private:
        T *data;
        int length;
};

template<class T>
SeqList<T>::SeqList(int length){
    if(length>-1){
        this->length = length;
        this->data = new T[length];
    }else{
        throw "WARNING:Argument ‘length‘ is invalid!";
    }
}

template<class T>
SeqList<T>::SeqList(int length,T array[]){
    if(length>-1){
        this->length = length;
        this->data = new T[length];
    }else{
        throw "WARNING:Argument ‘length‘ is invalid!";
    }

    for(int i=0;i<this->length;i++){
        this->data[i] = array[i];
    }

    printf("constructor has completed!");
} 

//入(栈/队),并返回新数组的长度
template<class T>
int SeqList<T>::push(T data){
    return 0;
}

//类似于队列,从队头入,并返回新数组的长度
template<class T>
int SeqList<T>::unshift(T data){
    return 0;
}

//出栈,并返回元素值
template<class T>
T SeqList<T>::pop(){

}

//出队,并返回该处元素值
template<class T>
T SeqList<T>::shift(){

}

template<class T>
int SeqList<T>::Length(){    //返回数组长度
    return this->length;
}

template<class T>
bool SeqList<T>::includes(T data){ //查询数组中是否存在该元素
    return true;
}

template<class T>
int SeqList<T>::indexOf(T data){//返回该值的下标
    return 0;
}

template<class T>
T SeqList<T>::valueOf(int index){//返回下标对应的值
    return NULL;
}
//(修)改
template<class T>
T SeqList<T>::replaceValueOf(int index){//按照下标替换值,并返回该处原来的值
    return NULL;
}

template<class T>
int SeqList<T>::replaceIndexOf(T data){//按照
    return 0;
}

//排序
template<class T>
void SeqList<T>::sort(){//默认升序排列
    ;
}

template<class T>
void SeqList<T>::sort(int TYPE){//0:升序,1逆序
    ;
} 

//逆序
template<class T>
void SeqList<T>::reverse(){
    ;
}        

template<class T>
SeqList<T>::~SeqList(){
    delete [] this->data;
} 

int main(){
    SeqList<int>demo(2);
    cout<<demo.Length();
    return 0;
}
时间: 2024-08-30 10:28:40

C++之顺序列表(栈/队列等)ADT的相关文章

java面向对象的栈 队列 优先级队列的比较

栈 队列 有序队列数据结构的生命周期比那些数据库类型的结构(比如链表,树)要短得多.在程序操作执行期间他们才被创建,通常用他们去执行某项特殊的任务:当完成任务之后,他们就会被销毁.这三个数据结构还有一个特点就是访问是受到限制的,即在特定时刻只有一个数据项可以被读取或者被删除,但是所谓的移除并不是真的删除,数据项依然在这些数据结构中,只不过因为指针已经指向其他数据项,没有办法访问到,当添加新的数据项时,当初移除的数据项被替代从而永远消失. 栈 队列 优先级队列的模拟思想 1.栈:栈遵循先进后出(F

java 集合 Connection 栈 队列 及一些常用

800x600 Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE MicrosoftInternetExplorer4 /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priori

&lt;数据结构与算法分析 C++描述&gt; 表/栈/队列

这一章主要内容: * 抽象数据类型(ADT)的概念 * 实现表/栈/队列 * 了解这三个数据结构的应用场景 1. ADT ADT: abstract data type, 是抽象的数学模型,在该模型上定义了一系列的操作.使用它的人,不需要了解它的存储方式,只关心它的逻辑特征.可以使用三元组的方法来表示(D,S,P),D是数据对象,S是数据之间的关系,P是对数据的基本操作,具体介绍,可以参考帖子:点击打开链接 2. 表ADT 表的数据自然是单个元素,而元素之间的关系是前驱与后继,操作包括查找/插入

栈&队列的简单实现

栈的定义---Stack 栈只允许在栈的末端进行插入和删除的线性表.栈具有先进后出的特性. 栈可用顺序表实现也可用链表实现. 但: 由于栈只能在末端进行操作,应使用顺序表实现. 用顺序表实现,有如下优点: (1)方便管理 (2)效率高 (3)cpu高速缓冲存取利用率高 实现如下: 测试如下: 队列的定义---Queue 队列只允许在队尾插入,队头删除.具有先进先出的特性. 队列的实现可用顺序表也可用链表. 若采用顺序表,删除时需要移动元素.为了操作方便,采取链表实现. 实现如下: 测试如下: 栈

数据结构与算法01--堆栈 &amp; 队列

基于顺序表的堆栈 基于链式表的堆栈 1 基于顺序表的堆栈 栈是一种特殊的线性表,是限定在线性表表尾进行插入删除操作的线性表.由栈的概念衍生出几个子概念,它们是: 1)栈顶,即允许进行插入.删除操作的一端,又称为表尾,用栈顶指针(top)来指示栈顶元素. 2)栈底,即固定端,又称为表头 3)空栈,即栈当中没有数据元素. 顺序栈是采用顺序存储结构的栈,即使用一组连续的存储单元(一般使用数组)来模拟栈,依次存放栈中的数据元素. 1.1 方案 顺序栈的基本操作包括: 1) 初始化操作,在初始化操作中将建

自定义数组列表和队列

最近一直在研究数据结构与算法,涉及到自定义数组和队列,感觉对JDK源代码的底层功能实现学习有一定的帮助,故作此总结,以供参考. ps:JDK的源代码更加复杂,我的自定义数组列表和队列只是一些简单的逻辑实现. 1.自定义数组列表(MyArrayList.java) package com.BlueStarWei.arrayList; /** * * show all fields and method,please click "ctrl + o" * * * 开发过程遇到的问题: *

【C/C++学院】0828-STL入门与简介/STL容器概念/容器迭代器仿函数算法STL概念例子/栈队列双端队列优先队列/数据结构堆的概念/红黑树容器

STL入门与简介 #include<iostream> #include <vector>//容器 #include<array>//数组 #include <algorithm>//算法 using namespace std; //实现一个类模板,专门实现打印的功能 template<class T> //类模板实现了方法 class myvectorprint { public: void operator ()(const T &

C语言栈队列实现二-十/二-八进制转换

C语言栈队列实现二-十/二-八进制转换 2015-04-05 Lover雪儿 1 //利用栈来求取二进制数的十进制与八进制的结果 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <math.h> 5 6 #define STACK_INIT_SIZE 20 //初始栈大小 7 #define STACK_INCREMENT 10 //扩充栈时每次增加的内存 8 9 typedef char ElemType;

python 列表之队列

列表实现队列操作(FIFO),可以使用标准库里的 collections.deque,deque是double-ended quene的缩写,双端队列的意思,它可以实现从队列头部快速增加和取出对象. >>> from collections import deque >>> queue = deque(["Eric", "John", "Michael"]) >>> queue.append(