数据结构-顺序表基本操作

这是顺序表基本操作:

#include<stdio.h>
#define MaxSize 50
#define ture 1
#define false -1
//静态分配
typedef struct {
    int data[MaxSize];
    int length;
}SqList;
/* 
//动态分配
typedef struct {
    int *data;
    int MaxSize;
    int length;
}SeqList;
*/

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

//增加
bool ListInsert(SqList &L,int i,int e) {
    if (i<1 || i>L.length + 1)//判断i是否有效
        return false;
    if (L.length >= MaxSize)//判断当前顺序表是否已满
        return false;
    for (int j = L.length; j >= i; j--) {//第i个及以后的往后面移动一个
        L.data[j] = L.data[j-1];
    }
    L.data[i - 1] = e;
    
    L.length++;
    return ture;
}
//删除
bool ListDelete(SqList &L, int i, int &e) {
    if (i<1 || i>L.length)//判断i是否有效
        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 ture;
}

//按位查找
int GetElem(SqList L,int i) {
    return L.data[i-1];
}
//按值查找
int LocateElem(SqList L, int e) {
    for (int i = 0; i < L.length; i++)
    {
        if (L.data[i] == e)
            return i + 1;
    }
    return false;
}


//输出线性表
void PrintList(SqList L) {
    printf("\n");
    for (int i = 0; i < L.length; i++)
        printf("L.data[%d]=%d  \n",i,L.data[i]);
    printf("\n");
}
int main() {
    SqList L;
    int e=-1;

    InitList(L);//初始化顺序表
    

    ListInsert(L, 1, 2);
    ListInsert(L, 2, 5);
    ListInsert(L, 3, 4);
    ListInsert(L, 4, 6);


    PrintList(L);//输出线性表

    ListDelete(L, 4, e);
    printf("e=%d\n", e);


    PrintList(L);//输出线性表
    printf("\n\n线长为:%d\n",Length(L));

    //查找第三位
    //按位查找
    int m=GetElem(L,3);
    printf("\n第三位为:%d\n",m);


    int n=LocateElem(L, 4);
    printf("\n值为4的是第%d位\n", n);

}

 

posted @ 2022-06-27 18:10  yasai  阅读(44)  评论(0编辑  收藏  举报