数据结构之顺序表

数据结构之顺序表

线性表

1.定义

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

2.表示

(a1,a2,a3,...,an) ( a 1 , a 2 , a 3 , . . . , a n )

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);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值