栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

顺序表的基本操作(静态、动态)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

顺序表的基本操作(静态、动态)

目录

M1. 静态 

M2. 动态


M1. 静态 

//顺序表(线性表的顺序存储)
//-----静态-----
//定义,初始化,打印,插入,删除,按位查找,按值查找

//顺序表(线性表的顺序存储)
//-----静态-----
//定义,初始化,打印,插入,删除,按位查找,按值查找

#include 
#define MaxSize 10
typedef struct{
    int data[MaxSize];
    int length;
}SqList;

//声明各种基本操作
void InitList(SqList &L);//初始化顺序表
void InitList1(SqList &L);//另外一种初始化方式,数组中的数仍然是随机生成的
void InitList2(SqList &L);//实际运用中会使用到的
void PrintList(SqList L);//打印顺序表
bool ListInsert(SqList &L,int i,int e);//插入操作
bool ListDelete(SqList &L,int i,int &e);//删除操作
int GetElem(SqList L,int i);//按位查找
int LocateElem(SqList L,int e);//按值查找


int main(){
    SqList L;
    InitList2(L);
    PrintList(L);
    ListInsert(L,3,9);//若i = 0,或者i >= 7,插入失败,打印出的顺序表和插入前相同
    PrintList(L);
    int e = -1;
    ListDelete(L,2,e);
    PrintList(L);
    ListDelete(L,6,e);//若i = 0,或者i >= 6,删除失败,打印出的顺序表和插入前相同
    PrintList(L);
    GetElem(L,2);
    GetElem(L,6);
    LocateElem(L,9);
    return 0;
}


//初始化顺序表
void InitList(SqList &L){
    for (int i = 0; i < MaxSize; ++i) {
        L.data[i] = 0;
    }
    L.length = 0;
}

//另外一种初始化方式,数组中的数仍然是随机生成的
void InitList1(SqList &L){
    L.length = 0;
}

//实际运用中会使用到的
void InitList2(SqList &L){
    for (int i = 0; i < MaxSize; ++i) {
        L.data[i] = 0;
    }
    for(int i = 0;i < 5;i++){
        L.data[i] = i;
    }
    L.length = 5;
}

//打印顺序表
void PrintList(SqList L){
    for (int i = 0; i < MaxSize; ++i) {
        printf("%d ",L.data[i]);
    }
    printf("n");
}

//插入操作
bool ListInsert(SqList &L,int i,int e){
    if(i < 1 || i > L.length + 1)//注意这边不是i > MaxSize
        return false;
    if(L.length >= MaxSize)
        return false;
    for (int j = L.length-1; j >= i-1 ; j--) {
        L.data[j+1] = L.data[j];
    }
    L.data[i-1] = e;
    L.length++;
    return true;
}

//删除操作
bool ListDelete(SqList &L,int i,int &e){
    if(i < 1 || i > L.length)
    return false;
    e = L.data[i-1];
    for (int j = i; j < L.length; ++j) {
        L.data[j-1] = L.data[j];
    }
    L.length--;
    return true;
}

//按位查找
int GetElem(SqList L,int i){
    if(i < 0 || i > L.length)
        printf("查找失败!n");
    else
        printf("%dn",L.data[i-1]);
}

//按值查找
int LocateElem(SqList L,int e){
    for (int i = 0; i < L.length; ++i){
        if(e == L.data[i])
            printf("%d",i+1);//注意这边是i+1而不是i;
    }
    return 0;
}



M2. 动态

//顺序表(线性表的顺序存储)
//-----动态-----
//定义,初始化,扩容,打印,插入,删除,按位查找,按值查找

//顺序表(线性表的顺序存储)
//-----动态-----
//定义,初始化,扩容,打印,插入,删除,按位查找,按值查找

#include 
#include 
#define InitSize 10//默认的最大长度
typedef struct{
    int *data;//指向data类型数据的指针
    int MaxSize;//顺序表的最大容量,初始时,最大容量 = 默认的最大长度
    int length;//顺序表的当前长度
}SeqList;

//声明各种基本操作
void InitList(SeqList &L);//初始化顺序表
void InitList2(SeqList &L);//实际运用中会使用到的
void IncreaseSize(SeqList &L,int len);//扩容
void PrintList(SeqList L);//打印链表
bool ListInsert(SeqList &L,int i,int e);//插入操作
bool ListDelete(SeqList &L,int i,int &e);//删除操作
int GetElem(SeqList L,int i);//按位查找
int LocateElem(SeqList L,int e);//按值查找


int main(){
    SeqList L;
    InitList2(L);
    PrintList(L);
    IncreaseSize(L,10);
    PrintList(L);
    ListInsert(L,2,9);
    PrintList(L);
    int e = -1;
    ListDelete(L,2,e);
    PrintList(L);
    GetElem(L,2);
    LocateElem(L,1);
}

//初始化顺序表
void InitList(SeqList &L){
    L.data = (int*)malloc(sizeof(int)*InitSize);
    L.length = 0;
    L.MaxSize = InitSize;
}

//实际运用中会使用到的
void InitList2(SeqList &L){
    L.data = (int*)malloc(sizeof(int)*InitSize);
    L.MaxSize = InitSize;
    for (int i = 0; i < 5; ++i) {
        L.data[i] = i;
    }
    L.length = 5;
}

//打印顺序表
void PrintList(SeqList L){
    for (int i = 0; i < L.MaxSize; ++i) {
        printf("L.data[%d] = %dn",i,L.data[i]);
    }
}

//扩容
void IncreaseSize(SeqList &L,int len){
    int *p;
    p = L.data;
    L.data = (int*)malloc(sizeof(int)*(L.MaxSize + len));
    for (int i = 0; i < L.length; ++i) {
        L.data[i] = p[i];
    }
    L.MaxSize = L.MaxSize + len;
    free(p);
}

//插入
bool ListInsert(SeqList &L,int i,int e){
    if(i < 1 || i > L.length + 1)
        return false;
    if(L.length >= L.MaxSize)
        return false;
    for (int j = L.length-1; j >= i-1 ; j--) {
        L.data[j+1] = L.data[j];
    }
    L.data[i-1] = e;
    L.length++;
    return true;
}

//删除
bool ListDelete(SeqList &L,int i,int &e){
    if(i < 1 || i > L.length)
    return false;
    e = L.data[i-1];
    for (int j = i; j < L.length; ++j) {
        L.data[j-1] = L.data[j];
    }
    L.length--;
    return true;
}

//按位查找
int GetElem(SeqList L,int i){
    if(i < 0 || i > L.length)
        printf("查找失败!n");
    else
        printf("%dn",L.data[i-1]);
}

//按值查找
int LocateElem(SeqList L,int e){
    for(int i = 0 ; i < L.length ; i++)
    {
        if(L.data[i] == e)
            printf("%dn",i+1);
    }
    return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/995517.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号