顺序表的基本运算

1、顺序表的基本数据单元

#define maxsize 12
typedef struct {
    int data[maxsize]; // 表的储存空间
    int last;
}sqlist, *sqlink; // *sqlink 表说明符

2、声明方法

// 置空表
void ClearList(sqlink L);

// 取表元素
int GetList(sqlink L, int no);

// 求表长
int LengthList(sqlink L);

// 插入元素
int InsertList(sqlink L,int data, int no);

// 删除元素
int DeleteList(sqlink L, int no);


// 定位元素
int LocateList(sqlink L,int data);

// 判空表
int EmptyList(sqlink L);

// 建空表
void CreateList(sqlink L);

// 打印表元素
void PrintList(sqlink L);

3、在main.c 里面实现方法

#include <stdio.h>
#include "sqlist.h"

// 建空表
void CreateList(sqlink L) {
    int tempNo = 1;
    int tempData = 0;
    do{
        printf("请输入书序表的第%d个元素",tempNo);
        scanf("%d",&tempData);
        if (tempData != -1){
            L->data[tempNo-1] = tempData;
            L->last = tempNo - 1;
            tempNo++;
        }
    }while (tempNo<=maxsize&&tempData != -1);
}

// 判空表
int EmptyList(sqlink L) {
    if (L->last == 0) {
        return 1;
    }else {
        return 0;
    }
}


// 定位元素
int LocateList(sqlink L,int data) {
    int i = 0;
    for(i=0; i < L->last; i++) {
        if (L->data[i] == data) {
            return i;
        }
    }
    return 0;
}

// 置空表
void ClearList(sqlink L) {
    L->last = -1;
}

// 取表元素
int GetList(sqlink L, int no) {
    if (no < 0 || no > L->last) {
        return -1;
    }else {
        return L->data[no];
    }
}

// 求表长
int LengthList(sqlink L) {
    return L->last;
}

// 插入元素
int InsertList(sqlink L,int data, int no) {
    // 思路:
    //1 判断表是否还有储存空间,如果没有,直接返回-1
    if(L->last <= no && no >= 0) {
        return -1;
    }else {
        int j = 0;
        for (j = L->last; j >= no; j--) {
            L->data[j+1] =  L->data[j];
            printf("j====%d\n",j);
        }
        L->data[no] = data ;
        L->last++;
        return 1;
    }
    //2 判断元素插入的位置是否在表的空间区域之内
    //3 开始插入操作,for循环里面的注意点有
        //必须从最后一个元素反过来遍历,例如最后一个元素下标是j,那么就是把j的下标对应的值,赋值给j+1,for循环的结束条件是j大于或等于i
        //在for循环的结束后面进行插入操作
    
    return 0;
}

// 删除元素
int DeleteList(sqlink L, int no) {
//    1先判断要删除的元素下标是否小于0或者大于当前列表的最大长度
//    2 进行删除操做
//    for循环从要删除的元素下标开始,一直到列表的Last,全部数据往前挪一位
//        3 最后把列表的长度减一
    if(L->last <= no && no >= 0) {
        return -1;
    }else {
        int j = 0;
        for (j = no; j < L->last; j++) {
            L->data[j] =  L->data[j+1];
            printf("j====%d\n",j);
        }
        L->last--;
        return 1;
    }
    return 0;
}

// 打印表元素
void PrintList(sqlink L) {
    int i;
    for (i = 0; i < LengthList(L); i++) {
        printf("%d", L->data[i]);
    }
    printf("\n");
}

int main(int argc, const char * argv[]) {
    // insert code here...
    // 分配内存
    sqlink L = (sqlink)malloc(sizeof(sqlist));
    CreateList(L);
    PrintList(L);
    // 定位元素
    
//    int i = 0;
//    i = LocateList(L, 22);
//    printf("22在%d的位置",i);
    
    // 插入元素
//    InsertList(L,2,4);
    DeleteList(L,2);
    PrintList(L);
    
    int num = GetList(L,2);
    printf("第三个元素是%d",num);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/s12117719679/article/details/84380968
今日推荐