数据结构 顺序表的实现(C语言)

来源:互联网 发布:淘宝店铺短链接生成 编辑:程序博客网 时间:2024/04/28 22:47
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <stdbool.h>//gcc不支持bool类型,故引入包
/*顺序结构的实现*/

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
struct Arr{
    int* pBase;            //首地址
    int maxSize;        //最大长度
    int valSize;        //有效元素的个数
};

// 判断是否为空
bool is_empty(struct Arr * pArr){
    if(pArr->valSize==0)
        return true;
    else
        return false;
}
//判断是否满
bool is_full(struct Arr * pArr){
    if(pArr->valSize==pArr->maxSize)
        return true;
    else
        return false;
}
//初始化
void init(struct Arr * pArr,int max){
    pArr->pBase = (int *)malloc(sizeof(struct Arr)*max);    //分配存储空间
    if(pArr->pBase==NULL){
        printf("分配存储空间失败\n");
        exit(-1);
        }
    pArr->maxSize = max;//最大长度
    pArr->valSize = 0;
    printf("初始化成功\n");
}
//追加元素
void append(struct Arr * pArr,int ele){
    if(is_full(pArr))
        printf("空间已满\n");
    else{
    pArr->pBase[pArr->valSize] = ele;
    ++pArr->valSize;    //有效表长+1
    }
}
//打印所有的元素
void show(struct Arr * pArr){
    int i ;
    for(i=0;i<pArr->valSize;i++){
        printf("%d ",pArr->pBase[i]);
    }
}
//删除第i个元素
void delete_arr(struct Arr * pArr,int i){
    if(i<1||i>pArr->valSize){
        printf("i不合法");
    }
    else{
        int j;
        for(j=i;j<=pArr->valSize-1;j++){
            pArr->pBase[j-1] = pArr->pBase[j];
        }
        --pArr->valSize;
    }
}
//指定位置添加元素
void insert(struct Arr * pArr,int i ,int ele){
    if(pArr->valSize==pArr->maxSize){
        printf("存储空间已满");
    }
    else if(i<1||i>pArr->valSize){
        printf("i不合法");
    }
    else{
        int j ;
        for(j=pArr->valSize-1;j>=i-1;j--){
            pArr->pBase[j+1] = pArr->pBase[j];
        }
        pArr->pBase[i-1] = ele;
        ++pArr->valSize;
    }
}
//取值
void getEle(struct Arr * pArr,int i){
    if(i<1||i>pArr->valSize){
        printf("i不合法");
    }
    else{
        int ele = pArr->pBase[i-1];
        printf("第%d个元素是%d\n",i,pArr->pBase[i-1]);
    }
}
//查找
bool locateEle(struct Arr * pArr,int ele){
    int i;
    for(i=0;i<pArr->valSize;i++){
        if(ele == pArr->pBase[i]){
            printf("%d是第%d号\n",ele,i+1);
            return true;
        }
        else{
            printf("%d不存在\n",ele);
            return false;
        }
    }
    
}    
//倒置
void inversion(struct Arr * pArr){
    int i = 0;  //向后移动
    int j = pArr->valSize-1;
    int t;
    while(i<j){
        t = pArr->pBase[i];
        pArr->pBase[i] = pArr->pBase[j];
        pArr->pBase[j] = t;
        i++;
        j--;
    }
}

int main(int argc, char *argv[]) {
    struct Arr arr;    //声明arr
    init(&arr,100);
    append(&arr,1);
    append(&arr,2);
    append(&arr,3);
    append(&arr,4);
    append(&arr,5);
    //delete_arr(&arr,1);
    //insert(&arr,1,100);
    //getEle(&arr,2);
    //locateEle(&arr,5);
    inversion(&arr);
    show(&arr);
}
2 0
原创粉丝点击