数据结构之顺序表

数据结构之顺序表

线性表

1.定义

具有相同特性的数据元素的一个而有限集合

2.表示

(a1,a2,a3,...,an)

3.特性

  • 有穷性:一个线性表中的元素个数是有限的。
  • 一致性:一个线性表中的所有元素的性质相同。具有相同的数据类型。
  • 序列性:一个线性表中所有元素之间的相对位置是线性的,即存在唯一的开始元素和终端元素,除此之外,每个元素只有唯一的前驱元素和后继元素。

顺序表

1.定义

线性表的顺序存储结构称为顺序表。即把线性表中的所有元素按照其逻辑顺序依次存储到计算机存储器中指定位置开始的一块连续的存储空间中。

2.表示

这里写图片描述

3.顺序表的实现

  • sqlist.h
const int MAXSIZE = 50;
typedef char ElementType;

typedef struct sqlist{
    ElementType data[MAXSIZE];
    int length;
}*SqlList;    //直接将结构体的指针重命名

void creatList(SqlList &L, ElementType a[], int n);    //创建顺序表

void initList(SqlList &L);    // 初始化顺序表

void destoryList(SqlList &L);    // 销毁顺序表

bool isEmpty(SqlList L);    // 判断是否为空

int listLength(SqlList L);    // 返回顺序表长度

void display(SqlList L);     // 输出

bool getItem(SqlList L, int i, ElementType &e);    // 获得节点信息

int getLocate(SqlList L, ElementType e);    // 获得节点位置

bool insertItem(SqlList L, ElementType e, int i);    // 插入节点

bool deleteItem(SqlList L, int i, ElementType &e);    // 删除节点
  • sqlist.cpp
#include "sqlist.h"
#include <iostream>
using namespace std;

void creatList(SqlList &L, ElementType a[], int n) {
    // 创建顺序表
    int i = 0;
    int k = 0;
    L = (SqlList) malloc(sizeof(SqlList));
    while (i < n){
        L->data[i] = a[i];
        k ++;
        i ++;
    }
    L->length = k;
}

void initList(SqlList &L) {
    // 初始化顺序表
    L = (SqlList) malloc(sizeof(SqlList));
    L->length = 0;
}

void destoryList(SqlList &L) {
    // 销毁顺序表
    free(L);
}

bool isEmpty(SqlList L) {
    // 判断是否为空
    if (0 == L->length) {
        return true;
    }
    return false;
}

int listLength(SqlList L) {
    // 返回顺序表长度
    return L->length;
}

void display(SqlList L) {
    // 输出
    for (int i = 0; i < L->length; i++) {
        cout<<L->data[i]<<" ";
    }
    cout<<endl;
}

bool getItem(SqlList L, int i, ElementType &e) {
    // 获得节点信息
    if (i < 1 || i > L->length) {
        return false;
    }
    e = L->data[i-1];
    return true;
}

int getLocate(SqlList L, ElementType e) {
    // 获得节点位置
    int i = 0;
    while (i < L->length && L->data[i] != e) {
        i ++;    
    }
    if (i >= L->length) {
        return 0;    
    } else {
        return i+1;
    }
}

bool insertItem(SqlList L, ElementType e, int i) {
    // 插入节点
    int j;
    if (i < 1 || i > L->length) {
        return false;
    }
    i--;
    for (j = L->length; j > i; j--) {
        L->data[j] = L->data[j-1];
    }
    L->data[i] = e;
    L->length ++;
    return true;
}

bool deleteItem(SqlList L, int i, ElementType &e) {
    // 删除节点
    int j;
    if (i < 1 && i > L->length) {
        return false;
    }
    i --;
    e = L->data[i];
    for (j = i; j < L->length-1; j++) {
        L->data[j] = L->data[j+1];    
    }
    L->length --;
    return true;
}
  • main.cpp
#include <iostream>
//#include "linklist/linklist.h"
#include "sqlist/sqlist.h"
using namespace std;

int main() {
    SqlList list;
    ElementType chArr[] = {'a', 'b', 'c', 'd', 'e'};

    // 1.2. 创建顺序表
    initList(list);
    creatList(list, chArr, 5);

    // 3输出顺序表
    display(list);

    //4输出顺序表的长度
    cout<<list->length<<endl;

    // 5判断顺序表是否为空
    cout<<isEmpty(list)<<endl;

    // 6输出顺序表的第3个元素
    char temp;
    getItem(list, 3, temp);
    cout<<temp<<endl;

    // 7输出元素a的位置
    cout<<getLocate(list, 'a')<<endl;

    // 8在第四个元素位置上插入f元素 9输出
    insertItem(list, 'f', 4);
    display(list);

    // 10删除第三个元素 输出 销毁顺序表
    deleteItem(list, 3, temp);
    display(list);
    destoryList(list);
}
阅读更多
文章标签: 数据结构
个人分类: 数据结构
想对作者说点什么? 我来说一句

数据结构 顺序表(c++实现)

2015年09月27日 50KB 下载

没有更多推荐了,返回首页

不良信息举报

数据结构之顺序表

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭