tag的使用C语言链表,C语言中链表的基本操作

#include

#include //malloc函数的实现

#include //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;

}

//判断数组为空返回true

bool is_empty(struct Arr *pArr)

{

if(0 == pArr->cnt)

return true;

else

return false;

}

//判断是否满返回true

bool 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;icnt;++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;icnt;++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

{

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;icnt;++i)

{

for(j = i+1;jcnt;++j)

{

if(pArr->pBase[i] > pArr->pBase[j])

{

temp = pArr->pBase[i];

pArr->pBase[i]=pArr->pBase[j];

pArr->pBase[j] = temp;

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值