考研一轮线表顺序存储完全实现含测试效果(王卓版)

13 篇文章 0 订阅

本博文源于王卓老师的《数据结构》,完整实现起来并不困难,但是要完整的测试需要对这些函数有一个大致的了解,因此,如果博文对你有帮助的话可以收藏。

1、线性表顺序存储结构

用指针为动态分配内存。

typedef struct{
    ElementType *elem;
    int length;
}SqList;

2、初始化线性表

线性表初始化主要在于分配内存空间以及长度置为0

Status InitList(SqList &L){
    L.elem = new ElementType[MAXSIZE];
    if(!L.elem) return ERROR;
    L.length = 0;
    return OK;
}

3、求线性表的长度

直接将L.length返回出去

int ListLength(SqList L){
    return L.length;
}

4、 插入线性表元素

插入在i位置的话,那就将元素倒着往后移,最后length++

Status ListInsert(SqList &L,int i,ElementType e){
    if(i<0 || i>L.length+1) return ERROR;
    if(L.length == MAXSIZE) return ERROR;
    for(int x = L.length-1;x>=i-1;x--){
        L.elem[x+1] = L.elem[x];
    }
    L.elem[i-1] = e;
    ++L.length;
    return OK;
}

5、删除线性表元素

删除指定位置元素,就是将后一个元素不断向前覆盖,最后–length;

Status ListDelete(SqList &L,int i){
    if(i<1 || i>L.length) return ERROR;
    for(int j =i;j<=L.length-1;j++){
        L.elem[j-1]=L.elem[j];
    }
    --L.length;
    return OK;
}

6、获得线性表指定位置元素

记得数组从下标0开始

Status GetElem(SqList L,int i,ElementType &e){
    if(i<0 || i>L.length) return ERROR;
    e = L.elem[i-1];

    return OK;
}

7、对查找某元素

一个个进行遍历

int LocateElem(SqList L,ElementType e){
    for(int i=0;i<L.length;i++){
        if(L.elem[i] == e) return i+1;
    }
    return ERROR;
}

测试效果

在这里插入图片描述

完整代码

#include<iostream>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define MAXSIZE 10
using namespace std;
typedef int Status;
typedef int ElementType;

//线性表的顺序存储
typedef struct{
    ElementType *elem;
    int length;
}SqList;

Status InitList(SqList &L){
    L.elem = new ElementType[MAXSIZE];
    if(!L.elem) return ERROR;
    L.length = 0;
    return OK;
}

Status GetElem(SqList L,int i,ElementType &e){
    if(i<0 || i>L.length) return ERROR;
    e = L.elem[i-1];

    return OK;
}

int LocateElem(SqList L,ElementType e){
    for(int i=0;i<L.length;i++){
        if(L.elem[i] == e) return i+1;
    }
    return ERROR;
}

//插入
Status ListInsert(SqList &L,int i,ElementType e){
    if(i<0 || i>L.length+1) return ERROR;
    if(L.length == MAXSIZE) return ERROR;
    for(int x = L.length-1;x>=i-1;x--){
        L.elem[x+1] = L.elem[x];
    }
    L.elem[i-1] = e;
    ++L.length;
    return OK;
}

Status ListDelete(SqList &L,int i){
    if(i<1 || i>L.length) return ERROR;
    for(int j =i;j<=L.length-1;j++){
        L.elem[j-1]=L.elem[j];
    }
    --L.length;
    return OK;
}
int ListLength(SqList L){
    return L.length;
}
int main(){
    SqList  L;
    InitList(L);
    cout << "after init,is L.length equal 0?:" << ListLength(L) << endl;
    ListInsert(L,1,1);
    ListInsert(L,2,2);
    ListInsert(L,3,3);
    ListInsert(L,4,4);
    ListInsert(L,5,5);
    cout << "After insert 5 element,L.length is 5?: " << ListLength(L) << endl;
    ElementType  e;
    if(GetElem(L,2,e)==ERROR){
        cout << "error"<< endl;
    }else{
        cout << "pos:2 element is :" << e << endl;

    }
    ListDelete(L,2);
    cout << "delete one element,L.length is 4:" << ListLength(L) << endl;

    LocateElem(L,3);
    cout << "Get pos 3 element,pos is :" << e << endl;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值