数据结构c语言版顺序字符串怎样创建,数据结构-C语言描述-线性表顺序结构存储(数组)...

# include

# include

 //包含了malloc函数

# include

 //包含了exit函数

//定义了一个数据类型,该数据类型的名字叫做struct Arr, 该数据类型含有三个成员,分别是pBase, len,

cnt

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);

int get();

bool is_empty(struct Arr * pArr);

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, 10);

append_arr(&arr, -3);

append_arr(&arr, 6);

append_arr(&arr, 88);

append_arr(&arr, 11);

if ( delete_arr(&arr, 4,

&val) )

{

printf("删除成功!\n");

printf("您删除的元素是: %d\n",

val);

}

else

{

printf("删除失败!\n");

}

show_arr(&arr);

inversion_arr(&arr); //倒置

printf("倒置之后的数组内容是:\n");

show_arr(&arr);

sort_arr(&arr); //排序

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;

}

bool is_empty(struct Arr * pArr)

{

if (0 == pArr->cnt)

return true;

else

return

false; }

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]); //int *

printf("\n");

}

}

bool append_arr(struct Arr * pArr, int val)

{

//满是返回false

if ( is_full(pArr) )

return false;

//不满时追加

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)

//要在pos位置前插入一个数字,则从最后一个至第pos-1个都要后移一个位置

{

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];

//返回第pos个位置前那个位置的值

for (i=pos;

icnt; ++i) //前一个值被删,则从第pos个至最后一个都要前移一个

{

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; //数组长度为cnt,所以最大下标为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(struct Arr * pArr)

{

int i, j, t;

//冒泡排序

for (i=0;

icnt; ++i)

{

for (j=i+1;

jcnt; ++j)

{

if

(pArr->pBase[i] >

pArr->pBase[j])

{

t

= pArr->pBase[i];

pArr->pBase[i]

= pArr->pBase[j];

pArr->pBase[j]

= t;

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值