C语言中的链表

C语言中链表的基本操作
#include <stdio.h>#include <malloc.h>//malloc函数的实现#include <stdlib.h>//exit函数//定义了一个数据类型,该数据类型含有三个变量struct Arr{    int * pBase;//存取的是数组第一个元素的地址    int len;//数组所能容纳的最大元素的个数    int cnt;//当前数组有效的个数};void init_arr(struct Arr *pArr,int length);bool append_arr(struct Arr *pArr,int val);//追加bool insert_arr(struct Arr *pArr,int pos,int val);//pos的值从1开始bool delete_arr(struct Arr *pArr,int pos,int *pVal);bool is_empty();bool is_full(struct Arr *pArr);void sort_arr(struct Arr *pArr);void show_arr(struct Arr *pArr);void inversion_arr(struct Arr *pArr);int main(void){    struct Arr arr;    int val;        init_arr(&arr,6);    show_arr(&arr);    append_arr(&arr,1);    append_arr(&arr,-4);    append_arr(&arr,40);    append_arr(&arr,2);    append_arr(&arr,76);    append_arr(&arr,3);    append_arr(&arr,4);    if( delete_arr(&arr,4,&val))    {        printf("删除成功\n");        printf("您删除的元素是:%d\n",val);    }else    {        printf("删除失败!\n");    }               /*    append_arr(&arr,1);    append_arr(&arr,2);    append_arr(&arr,3);    append_arr(&arr,4);    append_arr(&arr,5);    insert_arr(&arr,1,99);        */    show_arr(&arr);    inversion_arr(&arr);    printf("倒置之后的数组的内容是:\n");    show_arr(&arr);    sort_arr(&arr);    printf("排序之后的数组的内容是:\n");    show_arr(&arr);    //printf("%d\n",arr.len);    return 0;}//初始化void init_arr(struct Arr *pArr ,int length){    pArr->pBase=(int *)malloc(sizeof(int)*length);    if(NULL == pArr->pBase)    {            printf("动态内存分配失败!\n");        exit(-1);    }else    {            pArr->len =length;        pArr->cnt = 0;        }    return;}//判断数组为空返回truebool is_empty(struct Arr *pArr){    if(0 == pArr->cnt)        return true;    else        return false;}//判断是否满返回truebool is_full(struct Arr *pArr){    if(pArr->cnt == pArr->len)        return true;    else        return false;}//数组输出void show_arr(struct Arr *pArr){    if(is_empty(pArr))    {            printf("数组为空!\n");    }            else    {        for(int i =0;i<pArr->cnt;++i)            printf("%d ",pArr->pBase[i]);        printf("\n");        }}//追加数据bool append_arr(struct Arr *pArr,int val){    //满时返回false    if(is_full(pArr))        return false;    //不满时追加    else      pArr->pBase[pArr->cnt] = val;       (pArr->cnt)++;     return true;}//插入元素bool insert_arr(struct Arr *pArr,int pos,int val){    int i;    if(is_full(pArr))        return false;    if(pos<1 || pos>pArr->cnt+1)        return false;    for(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(struct Arr *pArr,int pos,int *pVal){    int i;    if(is_empty(pArr))        return false;    if(pos<1 || pos>pArr->cnt)        return false;    *pVal =pArr->pBase[pos-1];    for(i = pos;i<pArr->cnt;++i)    {                pArr->pBase[i-1] = pArr->pBase[i];    }    (pArr->cnt)--;    return true;}//元素倒置void inversion_arr(struct Arr *pArr){    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;        }}//元素排序void sort_arr(struct Arr *pArr){    int i,j;    int temp;    for(i = 0;i<pArr->cnt;++i)    {        for(j = i+1;j<pArr->cnt;++j)        {            if(pArr->pBase[i] > pArr->pBase[j])            {                temp = pArr->pBase[i];                pArr->pBase[i]=pArr->pBase[j];                pArr->pBase[j] = temp;                            }                }            }}