本文主要总结常用的数据结构——线性表之顺序数组,实现其基本的增删查改功能,不涉及完整功能,目的是为了熟悉常用数据结构属性和代码实现底层原理。
一、线性表——顺序数组seqList
1.1线性表定义
从逻辑上来看,线性表就是有n(n>=0)个数据元素a1,a2,…,an组成的有限序列。
对于一个非空的线性表,其逻辑结构特征如下:
- 有且仅有一个开始结点a1和一个直接后继节点a2,没有直接前驱节点,;
- 有且仅有一个终止节点an和一个直接前驱节点a*(n-1)*,没有直接后继节点;
- 其余的内部节点ai (2 <= i <= n-1)都有且仅有一个直接前驱节点a*(i-1)和一个直接后继节点a(i+1)*;
- 对于同一个线性表,各数据元素ai必须具有相同的数据类型,即同一线性表中各数据元素具有相同的类型,每个数据元素长度相同。
1.2线性表的基本运算
1.2.1基本运算
(1) 初始化(构造一个空的线性表,也就是new或者用堆栈创建一个元素的数组)
(2) 计算表长(线性表节点个数)
(3) 插入节点(插入当前位置,其它元素依次外后移动一位)
(4) 删除节点(删除当前节点元素,其它元素依次往前移动一位)
(5) 查找节点(返回查找到的第一个节点地址)
(6) 修改节点(先查找,然后再替换该位置元素)
简单来说,就是实现顺序表的初始化、元素的增删查改。
1.3线性表结构(顺序表)
图1-1 顺序表结构图
1.4代码实现
common.h
#pragma once
typedef short int BYTE;
typedef unsigned int WORD32;
Element.h
#pragma once
#include "common.h"
class Element
{
public:
Element();
Element(BYTE key, WORD32 value);
~Element();
BYTE getKey() const;
WORD32 getValue() const;
private:
BYTE key;
WORD32 value;
};
SeqList.h
#pragma once
#include <string>
#include "Element.h"
using namespace std;
class SeqList
{
public:
SeqList(WORD32 capability);
~SeqList();
const WORD32 getSize() const; // 返回当前实际元素个数
const WORD32 getCapability() const; // 返回当前最大容量
bool add(Element& element); // 加入元素
bool insert(WORD32 index, Element& element); // 插入元素
bool remove(WORD32 index); //删除元素
Element* find(const WORD32 index) const; // 查找元素,按索引位置
Element* find(const BYTE key) const; // 按元素关键字查找
bool repalce(WORD32 index, Element& element); // 修改指引索引位置元素
void showAllElements() const;
private:
Element *element; // 指向元素数组指针
WORD32 size; // 实际元素个数
WORD32 capability; // 最大容量
};
Element.cpp
#include "Element.h"
#include <iostream>
Element::Element(BYTE key, WORD32 value)
: key(key), value(value)
{
}
Element::Element() : key(0), value(0