标签:show 遍历 initial 初始化 include 保存 oid app 添加元素
#include <stdio.h>
#include <stdlib.h>
//数组的应用:顺序表【线性表的一种存储方式】
struct Arr
{
int * pBase; //保存首地址
int len; //数组的总长度
int cet; //cet: current efficient(当前有效元素的个数)
};
void init_arr(struct Arr * pArr, int length); //init: initialize (初始化)
void append_arr(struct Arr * pArr, int val); //向数组中增加元素
bool insert_arr(struct Arr * pArr, int pos, int val); //顺序表的插入 pos: position, pos的值从1开始
bool delete_arr(struct Arr * pArr, int pos, int * pVal); //顺序表的删除
void show_arr(struct Arr * pArr); //顺序表的遍历
int main()
{
struct Arr S; //创建顺序表S: Sequence
int val;
int i;
init_arr(&S, 10); //实现数组的初始化
show_arr(&S); //实现输出
for (i = 0; i < 10; i++)
{
scanf("%d", &val);
append_arr(&S, val);//实现追加
}
printf("添加元素后的数组为:\n");
show_arr(&S);
if(delete_arr(&S, 1, &val))
{
printf("删除成功! 您删除的元素是:%d\n", val);
}
else
{
printf("删除失败!\n");
}
printf("删除元素后的数组为:\n");
show_arr(&S); //实现输出
printf("插入后的数组为:\n");
insert_arr(&S, 1, 66);
//insert_arr(&S, 6, 99);
show_arr(&S); //实现输出
return 0;
}
/*——————————————————————————————————————————————————————*/
void init_arr(struct Arr * pArr, int length) //pArr = &S, *pArr = S
{
pArr->pBase = (int *)malloc(sizeof(int) * length); //动态分配数组才可跨函数使用
if(NULL == pArr->pBase)
{
printf("动态内存分配失败!");
exit(-1); //终止整个程序
}
else
{
pArr->len = length;
pArr->cet = 0;
}
return; //函数终止标志
}
/*——————————————————————————————————————————————————————*/
void append_arr(struct Arr * pArr, int val)
{
if(pArr->cet == pArr->len) //判断数组是否满了
{
return; //满了结束此函数
}
pArr->pBase[pArr->cet] = val; //不满将变量val的内容加入
(pArr->cet)++; //表长加1,【cet总是比下标多1,cet可以作为要添加的下标】
}
/*——————————————————————————————————————————————————————*/
void show_arr(struct Arr * pArr)
{
if(pArr->cet == 0) //判断数组是否为空
{
printf("此时数组是空的! 请添加数据元素\n");
}
else
{
for(int i = 0; i<pArr->cet; i++)
{
printf("%d\t", pArr->pBase[i]);
}
printf("\n\n");
}
}
/*——————————————————————————————————————————————————————*/
bool insert_arr(struct Arr * pArr, int pos, int val)//pos是元素的位置,而不是下标的位置
{
int i; //i是下标
if(pArr->cet == pArr->len) //判断数组是否满了
{
return false;
}
if(pos<1 || pos>pArr->cet+1)
{
return false;
}
for(i = pArr->cet-1; i>=pos-1; i--) //从最后一个元素循环到需要添加的元素
{
pArr->pBase[i+1] = pArr->pBase[i]; //给需要添加的元素腾出一个位置
}
pArr->pBase[pos-1] = val;
(pArr->cet)++; //有效元素的个数增加了一个
return true;
}
/*——————————————————————————————————————————————————————*/
bool delete_arr(struct Arr * pArr, int pos, int * pVal)
{
int i;
if(pArr->cet == 0) //判断数组是否为空
{
return false;
}
if(pos<1 || pos>pArr->cet)
{
return false;
}
*pVal = pArr->pBase[pos-1]; //把需要删除的值放到val中
for(i = pos; i<pArr->cet; i++)
{
pArr->pBase[i-1] = pArr->pBase[i];
}
(pArr->cet)--;
return true;
}
标签:show 遍历 initial 初始化 include 保存 oid app 添加元素
原文地址:https://www.cnblogs.com/gmengshuai/p/13909456.html