数据结构-顺序表-数值统计

题目:

https://acm.hdu.edu.cn/showproblem.php?pid=2008 

 解答:

#include <iostream>
using namespace std;

#define SLDataType double  

struct Sequlist{
    SLDataType* array;
	int size;
	int capacity;
};

//********************顺序表初始化***********/
void InitSequlist(Sequlist* sl, int capacity) {
	sl->array = new SLDataType[capacity];
	sl->size = 0;
	sl->capacity = capacity;
}

//********************顺序表销毁************/
void DestorySequlist(Sequlist* sl) {
    delete[] sl->array;
}

//**********************获取顺序表长度******//
int GetSequlistLength(Sequlist* sl) {
	return sl->size;
}

//**********************判断顺序表是否为空***//
bool SequlistEmpty(Sequlist* sl) {
	return sl->size == 0;
}

//***************顺序表的插入********** */
void insertSequlist(Sequlist* sl, int pos, SLDataType x) {
    //判断pos是否合法
	if(pos < 0 || pos > sl->size){
		printf("插入位置不合法\n");
	}
    //判断是否需要增容
	if(sl->size == sl->capacity){
	    int newCapacity = sl->capacity * 2;
		SLDataType* newArry = new SLDataType[newCapacity];
		for(int i = 0;i < sl->size;i++){
			newArry[i] = sl->array[i];
	}
		delete[] sl->array;
		sl->array = newArry;
		sl->capacity = newCapacity;
	}
	//往后挪数据
	for (int i = sl->size; i > pos; i--)
	{
		sl->array[i] = sl->array[i-1];
	}
	//插入数据
	sl->array[pos] = x;
	//更新大小
	sl->size++;
}

//***************************顺序表的删除元素 */
void deleteSequlist(Sequlist* sl, int pos){
	//判断pos是否合法
	if(pos < 0 || pos > sl->size){
		printf("插入位置不合法\n");
	}
	//删除元素
	for(int i = pos;i < sl->size;i++){
		sl->array[i] = sl->array[i+1];
	}
	//更新大小
	sl->size--;
}

//**************************顺序表查找元素下标索引 */
int findSequlistIndex(Sequlist* sl, int x){
	for (int i = 0; i < sl->size; i++)
	{
		if (sl->array[i] == x)
		{
			return i;
		}
	}
	return -1;
}

//************************顺序表查找元素 */
double getSequlist(Sequlist* sl, int pos){
	//判断pos是否合法
	if(pos < 0 || pos > sl->size){
		printf("插入位置不合法\n");
	}
	//得到元素
	return sl->array[pos];
}

//***********************更新数据********//
void updateSequlist(Sequlist* sl, int pos, SLDataType x){
	//判断pos是否合法
	if(pos < 0 || pos > sl->size){
		printf("插入位置不合法\n");
	}
	//更新元素
	sl->array[pos] = x;
}
int main()
{
	int n;
	while(cin>>n && n){
		Sequlist sl;
		InitSequlist(&sl,1);
		for (int i = 0; i < n; i++)
		{
			double x;
			cin>>x;
			insertSequlist(&sl,i,x);
		}
		int cnt1 = 0,cnt2 = 0,cnt3 = 0;
		for (int i = 0; i < sl.size; i++)
		{
			double y;
			y = getSequlist(&sl,i);

			if (y>0)
			{
				cnt1++;
			}else if(y<0){
				cnt2++;
			}else{
				cnt3++;
			}
		}
		
		cout<<cnt2<<" "<<cnt3<<" "<<cnt1<<endl;
	}
	return 0;
}

遇到的问题:因为存在小数部分,所有全部返回值类型改成double类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值