C++__顺序表(练习)

顺序表

code.h

#ifndef CODE_H_
#define CODE_H_

#define DATA_SIZE 10

typedef int data_type;

enum CODE_OP {
    CODE_ERR = -1, CODE_OK
};

class CODE {
private:
    int count;
    int size;
    data_type *data;
public:
    CODE();
    CODE(unsigned int size);
    ~CODE();

    int get_count();
    void set_count(int count);

    int get_size();
    void set_size(int size);

    void set_data(data_type *data);
    data_type *get_data();

    data_type get_data(unsigned int i);
    void set_data(data_type data, unsigned int i);

//    CODE *Create();
//    void Destroy(CODE *pList);
    int Insert(CODE *pList, data_type tData, int iOffset);
    int Delete(CODE *pList, data_type *pData, int iOffset);
    int Update(CODE *pList, data_type tNew, data_type tOld);
    int Select(CODE *pList, data_type tData);
    void ShowList(CODE *pList);
};

#endif /* CODE_H_ */

code.cpp

#include <stdlib.h>
#include <string.h>
#include <iostream>
#include "CODE.h"
using namespace std;

CODE::CODE() {
    // TODO Auto-generated constructor stub
    this->set_count(0);
    this->set_size(0);
    this->set_data(NULL);
}

CODE::CODE(unsigned int count) {

    this->set_count(count);
    this->set_size(0);
    this->set_data(new data_type[count]);
}

CODE::~CODE() {
    // TODO Auto-generated destructor stub
    cout << "~CODE" << endl;
}

int CODE::get_count() {
    return this->count;
}
void CODE::set_count(int count) {
    this->count = count;
}

int CODE::get_size() {
    return this->size;
}

void CODE::set_size(int size) {
    this->size = size;
}

data_type *CODE::get_data() {
    return this->data;
}

void CODE::set_data(data_type *data) {
    this->data = data;
}

data_type CODE::get_data(unsigned int i) {
    return this->data[i];
}

void CODE::set_data(data_type data, unsigned int i) {
    this->data[i] = data;
}

int CODE::Insert(CODE *pList, data_type tData, int iOffset) {
    if (NULL == pList || 0 > iOffset || pList->get_count() < iOffset) {
        cout << "input error insert" << endl;
        return CODE_ERR;
    }

    if (pList->get_count() == pList->get_size()) {
        data_type *newData = new data_type[DATA_SIZE + pList->get_count()];
        if (NULL == newData) {
            cout << "malloc newData error" << endl;
            return CODE_ERR;
        }
        memset(newData, 0, DATA_SIZE + pList->get_count());
        memcpy(newData, pList->get_data(),
                pList->get_size() * sizeof(data_type));
        delete (pList->get_data());
        pList->set_data(newData);
        pList->set_count(DATA_SIZE + pList->get_count());
    }

    int iMoveCount = pList->get_size() - iOffset;
    int i = pList->get_size() - 1;
    while (iMoveCount--) {
        pList->set_data(pList->get_data(i), i + 1);
        i--;
    }
    pList->set_data(tData, iOffset);
    pList->set_size(pList->get_size() + 1);

    return CODE_OK;
}

int CODE::Delete(CODE *pList, data_type *pData, int iOffset) {
    if (NULL == pList || NULL == pData || 0 > iOffset
            || pList->get_size() < iOffset) {
        cout << "input error delete" << endl;
        return CODE_ERR;
    }

    *pData = pList->get_data(iOffset);
    int i = iOffset;
    for (; i < pList->get_size() - 1; i++) {
        pList->set_data(pList->get_data(i + 1), i);
    }
    pList->set_size(pList->get_size() - 1);

    return CODE_OK;
}

int CODE::Update(CODE *pList, data_type tNew, data_type tOld) {
    if (!pList) {
        cout << "input error update" << endl;
        return CODE_ERR;
    }

    int i = 0;
    for (; i < pList->get_size() - 1; i++) {
        if (tOld == pList->get_data(i))
            pList->set_data(tNew, i);
    }

    return CODE_OK;
}

int CODE::Select(CODE *pList, data_type tData) {
    if (!pList) {
        cout << "input error select" << endl;
        return CODE_ERR;
    }

    int i = 0;
    for (; i < pList->get_size(); i++) {
        if (pList->get_data(i) == tData)
            return i;
    }

    return CODE_OK;
}

void CODE::ShowList(CODE *pList) {
    if (!pList) {
        cout << "input error show" << endl;
        return;
    }

    int i = 0;
    for (; i < pList->get_size(); i++)
        cout << pList->get_data(i) << "  ";
    cout << endl;

    return;
}

main.cpp

#include "CODE/CODE.h"

#include <iostream>
using namespace std;

void function() {
    CODE code;
    CODE *pList = new CODE(DATA_SIZE);
    if (!pList) {

        return;
    }
    cout << "rank ok" << endl;
    int i = 14;
    while (i--) {
        code.Insert(pList, i, 0);
    }
    code.ShowList(pList);
    int tData = -1;
    code.Delete(pList, &tData, 4);
    code.ShowList(pList);
    code.Update(pList, 999, 5);
    code.ShowList(pList);
    delete pList;

    return;
}

int main() {
    function();

    return 0;

}
时间: 2024-10-11 11:51:57

C++__顺序表(练习)的相关文章

c 语言 动态顺序表

#ifndef __SEQLIST_D__//头文件 #define __SEQLIST_D__ #define CAPICITY 4 typedef int DataType; typedef struct SeqList_D { DataType* _Array; size_t    _size; size_t    _capicity; }SeqL,*pSeqL; void InitSeqList(pSeqL seq); void PrintfSeqList(pSeqL seq); voi

顺序表算法设计笔记

1.已知长度为 n 的线性表 A 采用顺序存储结构.设计一个时间复杂度为O(n).空间复杂度为O(1)的算法,该算法删除线性表中所有值为 x 的元素数据元素. 以下两种方法都不满足要求: 如果删除一个值为 x 的元素都进行移动, 其时间复杂度为O(n^2),时间复杂度为O(1). 如果借助一个新的顺序表, 存放将A中所有不为x的元素,其时间复杂度O(n), 空间复杂度为O(n). 解法一:设删除 A 中所有值等于 x 元素后的顺序表为A1, 显然A1包含在 A 中, 为此A1重用 A 的空间.

2、顺序表

|   版权声明:本文为博主原创文章,未经博主允许不得转载. 从这节开始,以后的每一篇博文均会只描述一种结构.这节要解决的是有关顺序表的问题,下面就是一些顺序表的基本的知识点: 1. 顺序表其实就是线性表的一种,它除开始节点和结束节点之外的其他节点,均有且只有一个直接前趋和一个直接后继,开始 节点只有一个后继节点,结束节点只有一个前趋节点. 2. 用顺序存储方法存储的线性表就称为顺序表. 3. 顺序存储方法就是将表的节点按逻辑上的次序依次的存放在一组连续的内存单元中,这里是指在逻辑上连续排列,在

顺序表查找和有序表查找

查找里面顺比表查找和有序表查找(包括二分查找,插值查找,斐波那契查找)比较简单,直接贴代码,代码里面有详细注释. 1 #include <iostream> 2 using namespace std; 3 4 //顺序表查找(线性查找.静态表查找) 时间复杂度为O(n) 5 int Seq_Search(int *s,int n,int key) 6 { 7 s[0] = key; //设置了一个哨兵,避免了每次比较一次过后都要判断查找位置是否越界 8 int i = n; 9 while

线性表---顺序表

线性结构的特点是:在非空的有限集合中,只有唯一的第一个元素和唯一的最后一个元素.第一个元素没有直接前驱元素,最后一个没有直接的后继元素.其它元素都有唯一的前驱元素和唯一的后继元素. 线性表是一种最简单的线性结构.线性表可以用顺序存储结构和链式存储结构存储,可以在线性表的任意位置进行插入和输出操作. 要想将线性表在计算机上实现,必须把其逻辑结构转化为计算机可识别的存储结构.线性表的存储结构主要有两种:顺序存储结构和链式存储结构. 线性表的顺序表示与实现 线性表的顺序存储结构 线性表的顺序存储结构指

模板实现顺序表

类模板的成员函数: 类模板的成员函数本身是一个普通函数.但是,类模板的每个实例都有其自己版本的成员函数.因此,类模板的成员函数具有和模板相同的模板参数.因此,在=定义在类模板之外的成员函数就必须以template开始,后跟类模板参数列表. 类模板中的友元函数: 类模板中的友元函数,应该在类中定义.若只在类中声明,在类外定义,则在链接时会出现错误. 类模板实现顺序表: "SeqList.h" //冒泡法 "test.cpp"

顺序表

#include <cstdio> #include <cstring> ///都用c语言写的 #include <iostream> ///建议从主函数开始看 #include <cstdlib> using namespace std; int sequence_map[1000]; int total_sequence = 0; void init_sequence() ///主界面. ///一级菜单中顺序表的操作界面 init初始化 { printf

顺序表的非递减数列合并

#include<stdio.h> /*包含输入输出头文件*/ #define ListSize 100 typedef int DataType; typedef struct { DataType list[ListSize]; int length; }SeqList; void InitList(SeqList *L) /*将线性表初始化为空的线性表只需要把线性表的长度length置为0*/ { L->length=0; /*把线性表的长度置为0*/ } int ListEmpt

顺序表(存在问题)

#include <iostream> using namespace std; typedef int DataType; struct SeqList { int MAXNUM; int n; DataType *element; }; typedef struct SeqList *PSeqList; PSeqList createEmptySeq(int m) { PSeqList palist = (PSeqList) malloc (sizeof (struct SeqList))