数据结构

数据结构重学日记(六)顺序表增删改查

2019-01-07  本文已影响2人  南瓜方糖

前两节看过了顺序表的概念和实现,今天来试着运行一下顺序表增删改查的代码。

先安装下编辑器吧,系统还是之前状的 ubuntu18.10,软件商店可以直接安装 jetbrains家的 c 语言编辑器 Clion,晚上的时候会有点慢。

另外这里跟前两篇中的代码会有些区别,因为之前涉及到的代码是 c++ 而这里是 c,所以这里需要注意一下。

查到资料说也可以通过引入 stdbool.h 来使用,这里就先不用了吧。

创建一个新项目,打开后会有一个默认的 main.c 文件


#include <stdio.h>

int main( )
{
    printf("Hello, World!\n");
    return 0;
}

/*  执行输出
        Hello, World!

再来初始化并输出一个顺序表:


#include <stdio.h>

#define MaxSize 50
typedef int ElemType;
typedef struct {
    ElemType data[MaxSize];

    int length;
} SqList;

void InitList(SqList *L) {

    L->data[0] = 1;
    L->data[1] = 2;
    L->data[2] = 3;
    L->length = 3;
}

void PrintList(SqList *L) {
    for (int i = 0; i < L->length; ++i) {
        printf("%d",L->data[i]);
        printf("\r\n");

    }
}

int main() {
    SqList L;
    ElemType res;
    int del;
    int loc;

    InitList(&L);
    PrintList(&L);

    printf("Hello, World!\n");
    return 0;
}

/*  执行输出
1
2
3
*/

可以看到输出了 1,2,3 和 Hello, World,接下来在顺序表第二个位置插入一个新的数据元素 60:

插入操作,在 main() 中调用 res = InsertList(&L, 2, 60);


int InsertList(SqList *L,int i, ElemType e){
    if(i < 1 || i > L->length +1){
        printf("位置输入错误\r\n");
        return 0;
    }
    if(L->length > MaxSize){
        printf("存储空间已满\r\n");
        return 0;
    }

    for(int j = L->length; j >= i -1; j--){
        L->data[j+1] = L->data[j];
    }
    L->data[i -1] = e;
    L->length++;
    return 1;
}

/* 执行结果
1
60
2
3
*/

可以看到 60 已经被插入到了顺序表第二个位置。

删除操作del = DeleteElem(&L, 2, &del);



int DeleteElem(SqList *L, int i, int *e) {
    if (i < 1 || i > L->length) {
        return 0;
    }

    *e = L->data[i];
    for (int j = i; j < L->length; j++) {
        L->data[j - 1] = L->data[j];
    }
    L->length--;
    return 1;
}

/* 执行结果
1
60
2
3

1
2
3
*/

查操作 loc = SearchElem(&L, 2);


int SearchElem(SqList *L,int i){
    for(int j = 0; j< L->length;j++){
        if(L->data[j] == i){
            return j +1;
        }
    }
    return 0;
}

/* 执行结果
2
*/

查操作这里也可以改成用位置查值,还有改操作比较简单,就不做了。

完整代码:


#include <stdio.h>

#define MaxSize 50
typedef int ElemType;


typedef struct {
    ElemType data[MaxSize];

    int length;
} SqList;

void InitList(SqList *L) {

    L->data[0] = 1;
    L->data[1] = 2;
    L->data[2] = 3;
    L->length = 3;
}

void PrintList(SqList *L) {
    for (int i = 0; i < L->length; ++i) {
        printf("%d", L->data[i]);
        printf("\r\n");

    }
}

int InsertList(SqList *L, int i, ElemType e) {
    if (i < 1 || i > L->length + 1) {
        printf("位置输入错误\r\n");
        return 0;
    }
    if (L->length > MaxSize) {
        printf("存储空间已满\r\n");
        return 0;
    }

    for (int j = L->length; j >= i - 1; j--) {
        L->data[j + 1] = L->data[j];
    }
    L->data[i - 1] = e;
    L->length++;
    return 1;
}

int DeleteElem(SqList *L, int i, int *e) {
    if (i < 1 || i > L->length) {
        return 0;
    }

    *e = L->data[i];
    for (int j = i; j < L->length; j++) {
        L->data[j - 1] = L->data[j];
    }
    L->length--;
    return 1;
}

int SearchElem(SqList *L,int i){
    for(int j = 0; j< L->length;j++){
        if(L->data[j] == i){
            return j +1;
        }
    }
    return 0;
}

int main() {
    SqList L;
    ElemType res;
    int del;
    int loc;

    InitList(&L);
    res = InsertList(&L, 2, 60);
    PrintList(&L);
    printf("\r\n");
    printf("%d\r\n", res);
    printf("\r\n");

    del = DeleteElem(&L, 2, &del);
    PrintList(&L);
    printf("\r\n");
    printf("%d\r\n", del);
    printf("\r\n");

    loc = SearchElem(&L, 2);
    printf("\r\n");
    printf("%d\r\n", loc);
    printf("\r\n");

    printf("Hello, World!\n");
    return 0;
}

上一篇 下一篇

猜你喜欢

热点阅读