数组的应用—顺序表简化版.cpp

Posted gmengshuai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组的应用—顺序表简化版.cpp相关的知识,希望对你有一定的参考价值。

#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("添加元素后的数组为:
");
	show_arr(&S); 

	if(delete_arr(&S, 1, &val))
	{
		printf("删除成功!  您删除的元素是:%d
", val);
	}
	else 
	{
		printf("删除失败!
");
	}

	printf("删除元素后的数组为:
");
	show_arr(&S);    //实现输出


	printf("插入后的数组为:
");
	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("此时数组是空的! 请添加数据元素
");
	}
	else
	{
		for(int i = 0; i<pArr->cet; i++)
		{
			printf("%d	", pArr->pBase[i]);
		}
		printf("

");
	}
}

/*——————————————————————————————————————————————————————*/
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;
}

以上是关于数组的应用—顺序表简化版.cpp的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 C 代码片段不起作用?简化版可以。为 unsigned long long 传递不带 VA_ARGS 的 args

数据结构Python版——顺序表

数据结构(C语言版)严蔚敏(线性表队列栈数组树图等数据结构参考代码,持续更新中。。。)

5-1-数组的顺序存储结构-数组和广义表-第5章-《数据结构》课本源码-严蔚敏吴伟民版

5-3-行逻辑链接的顺序表(稀疏矩阵)-数组和广义表-第5章-《数据结构》课本源码-严蔚敏吴伟民版

5-2-三元组顺序表(稀疏矩阵)-数组和广义表-第5章-《数据结构》课本源码-严蔚敏吴伟民版