C语言实现顺序表

来源:互联网 发布:免费的crm软件 编辑:程序博客网 时间:2024/06/06 03:17


数据结构是个很难学的东西。首先概念上十分抽象,不容易理区分和理解;其次初学者实现起来很困难,书上一般给的程序不是伪代码,就是不完整的代码,想要上机做实验有很大问题。所以学习过程中稍微遇上点麻烦就很容易放弃。鉴于自己在学习数据结构的痛苦经历特地分享一下自己的完整代码,希望能对新手提供一些微小的帮助。


#include <stdio.h>#include <stdlib.h>typedef enum {true, false} bool;typedef struct Arr{    int *pBase;    int len;    int cnt;}Array, *pArray;//函数声明void init_arr(pArray parr, int len);//生成一个顺序表bool is_empty(pArray parr);//判断顺序表是否为空bool is_full(pArray parr);//判断顺序表是否为满bool append_arr(pArray parr, int val);//追加一个元素void show_arr(pArray parr);//打印顺序表bool insert_arr(pArray parr, int pos, int val);//在第pos的位置插入valbool delete_arr(pArray parr, int pos, int *pVal);//删除第pos个元素int get(pArray parr, int pos);//得到第pos个元素值void inversion(pArray parr);//倒转顺序表void sort_arr(pArray parr);//顺序表的排序int main(int argc, const char * argv[]) {        Array arr;    int val, getval;        init_arr(&arr, 6);    append_arr(&arr, 13);    append_arr(&arr, 4);    append_arr(&arr, 34);    append_arr(&arr, 6);    show_arr(&arr);    insert_arr(&arr, 2, 99);    show_arr(&arr);    if (delete_arr(&arr, 2, &val)==true) {        printf("删除成功,删除的数据为:%d\n", val);    }else{        printf("删除失败");    }    show_arr(&arr);    getval = get(&arr, 4);    printf("得到的值为:%d\n", getval);    inversion(&arr);    show_arr(&arr);    sort_arr(&arr);    show_arr(&arr);        return 0;}void init_arr(pArray parr, int len){    parr->pBase = (int *)malloc(sizeof(int)*len);    if (parr->pBase == NULL) {        printf("内存分配失败\n");        exit(-1);    }else{        parr->len = len;        parr->cnt = 0;    }        return;}bool is_empty(pArray parr){    if (parr->cnt == 0) {        return true;    }else        return false;}bool is_full(pArray parr){    if (parr->cnt == parr->len) {        return true;    }else        return false;}bool append_arr(pArray parr, int val){    if (is_full(parr) == true) {        return false;    }else{        parr->pBase[parr->cnt] = val;        parr->cnt++;    }        return true;}void show_arr(pArray parr){    if (is_empty(parr) == true) {        printf("顺序表为空!\n");        exit(-1);    }else{        for (int i=0; i<parr->cnt; i++) {            printf("%d ", parr->pBase[i]);        }    }    printf("\n");        return;}bool insert_arr(pArray parr, int pos, int val){    if (is_full(parr) == true) {        return false;    }    if (pos<1 || pos>parr->cnt+1) {        return false;    }    for (int i = parr->cnt-1; i>=pos-1; i--) {        parr->pBase[i+1] = parr->pBase[i];    }    parr->pBase[pos-1] = val;    (parr->cnt)++;        return true;}bool delete_arr(pArray parr, int pos, int *pVal){    if (is_empty(parr) == true) {        return false;    }    if (pos<1 || pos>parr->cnt) {        return false;    }    *pVal = parr->pBase[pos-1];    for (int i=pos; i<parr->cnt; i++) {        parr->pBase[i-1]=parr->pBase[i];    }    (parr->cnt)--;        return true;}int get(pArray parr, int pos){    if (is_empty(parr) == true) {        return false;    }    if (pos<1 || pos>parr->cnt) {        return false;    }        return parr->pBase[pos-1];}void inversion(pArray parr){    if (is_empty(parr) == true) {        printf("顺序表为空!\n");        exit(-1);    }else{        int i = 0;        int j = parr->cnt-1;        int t;        while (i<j) {            t = parr->pBase[i];            parr->pBase[i] = parr->pBase[j];            parr->pBase[j] = t;            i++;            j--;        }    }        return;}void sort_arr(pArray parr){    int i, j, t;        for (i=0; i<parr->cnt; i++) {        for (j=i+1; j<parr->cnt; j++) {            if (parr->pBase[i] > parr->pBase[j]) {                t = parr->pBase[i];                parr->pBase[i] = parr->pBase[j];                parr->pBase[j] = t;            }        }    }        return;}



原创粉丝点击