当前位置: 首页 > article >正文

C++ 顺序表练习

代码1 对应杭电OJ 第11页的求奇数的乘积

#include<iostream>
using namespace std;
#define eleType double

struct SequentialList {
	eleType* elements;
	int size;
	int capacity;
};

void initializeList(SequentialList* list, int capacity) {
	list->elements = new eleType[capacity];
	list->size = 0;
	list->capacity = capacity;
}

void destoryList(SequentialList* list) {
	delete[] list->elements;
}

int size(SequentialList* list) {
	return list->size;
}

bool isEmpty(SequentialList* list) {
	return list->size == 0;
}

void insert(SequentialList* list, int index, eleType element) {
	if (index <0 || index > list->size) {
		throw std::invalid_argument("Invalid index");
	}

	if (list->size == list->capacity) {
		int newCapacity = list->capacity * 2;
		eleType *newelement = new eleType[newCapacity]();
		for (int i = 0; i < newCapacity / 2; ++i) {
			newelement[i] = list->elements[i];
		}
		delete[] list->elements;
		list->elements = newelement;
		list->capacity = newCapacity;
	}
	if (list->size < list->capacity) {
		for (int i = list->size - 1; i > index; --i) {
			list->elements[i] = list->elements[i - 1];
		}
		list->elements[index] = element;
		list->size++;
	}

}
void deleteElement(SequentialList* list, int index) {
	if (index < 0 || index >= list->size) {
		throw std::invalid_argument("Invalid_index");
	}
	for (int i = index; i < list->size - 1; ++i) {
		list->elements[i] = list->elements[i + 1];
	}
	list->size--;
}

int findElement(SequentialList* list, eleType element) {
	for (int i = 0; i < list->size; ++i) {
		if (list->elements[i] == element) {
			return i;
		}
	}
	return -1;
}

eleType getElement(SequentialList* list, int index) {
	if (index < 0 || index >= list->size) {
		throw std::invalid_argument("Invalid_index");
	}
	return list->elements[index];
}

void updateElement(SequentialList* list, int index, eleType value) {
	if (index < 0 || index >= list->size) {
		throw std::invalid_argument("Invalid_index");
	}
	list->elements[index] = value;
}

int main() {
	int n;
	while (cin >> n && n) {
		SequentialList s1;
		initializeList(&s1, 1);
		for (int i = 0; i < n; ++i) {
			double a;
			cin >> a;
			insert(&s1, i, a);
		}
		int ncnt = 0, zcnt = 0, pcnt = 0;
		for (int i = 0; i < size(&s1); ++i) {
			eleType val = getElement(&s1, i);
			if (val > 1e-8) {
				ncnt++;
			}
			else if (val < -1e-8) {
				pcnt++;
			}
			else {
				zcnt++;
			}
		}
		cout << pcnt << ' ' << zcnt << ' ' << ncnt << endl;
	}

	return 0;
}

代码2 对应杭电OJ 青年歌手大奖赛_评委会打分

#include<iostream>
using namespace std;
#define eleType double

struct SequentialList {
	eleType* elements;
	int size;
	int capacity;
};

void initializeList(SequentialList* list, int capacity) {
	list->elements = new eleType[capacity];
	list->size = 0;
	list->capacity = capacity;
}

void destoryList(SequentialList* list) {
	delete[] list->elements;
}

int size(SequentialList* list) {
	return list->size;
}

bool isEmpty(SequentialList* list) {
	return list->size == 0;
}

void insert(SequentialList* list, int index, eleType element) {
	if (index <0 || index > list->size) {
		throw std::invalid_argument("Invalid index");
	}

	if (list->size == list->capacity) {
		int newCapacity = list->capacity * 2;
		eleType *newelement = new eleType[newCapacity]();
		for (int i = 0; i < newCapacity / 2; ++i) {
			newelement[i] = list->elements[i];
		}
		delete[] list->elements;
		list->elements = newelement;
		list->capacity = newCapacity;
	}
	if (list->size < list->capacity) {
		for (int i = list->size - 1; i > index; --i) {
			list->elements[i] = list->elements[i - 1];
		}
		list->elements[index] = element;
		list->size++;
	}

}
void deleteElement(SequentialList* list, int index) {
	if (index < 0 || index >= list->size) {
		throw std::invalid_argument("Invalid_index");
	}
	for (int i = index; i < list->size - 1; ++i) {
		list->elements[i] = list->elements[i + 1];
	}
	list->size--;
}

int findElement(SequentialList* list, eleType element) {
	for (int i = 0; i < list->size; ++i) {
		if (list->elements[i] == element) {
			return i;
		}
	}
	return -1;
}

eleType getElement(SequentialList* list, int index) {
	if (index < 0 || index >= list->size) {
		throw std::invalid_argument("Invalid_index");
	}
	return list->elements[index];
}

void updateElement(SequentialList* list, int index, eleType value) {
	if (index < 0 || index >= list->size) {
		throw std::invalid_argument("Invalid_index");
	}
	list->elements[index] = value;
}

int main() {
	int n;
	while (cin >> n) {
		SequentialList s1;
		initializeList(&s1, 1);
		for (int i = 0; i < n; ++i) {
			double a;
			cin >> a;
			insert(&s1, i, a);
		}
		eleType m_max = -1000000000, m_min = 1000000000, m_sum = 0;
		for (int i = 0; i < size(&s1); ++i) {
			eleType val = getElement(&s1, i);
			if (val > m_max) {
				m_max = val;
			}
			if (val < m_min) {
				m_min = val;
			}
			m_sum += val;
		}
		m_sum -= m_max;
		m_sum -= m_min;
		m_sum /= (n - 2);
		printf("%.2lf\n", m_sum);
		


	}

	return 0;
}


http://www.kler.cn/a/538088.html

相关文章:

  • 程序诗篇里的灵动笔触:指针绘就数据的梦幻蓝图<8>
  • 【C++】命名空间
  • ASP.NET Core JWT
  • 除了webpackPrefetch,还有什么其他预加载组件的方法?
  • 在请求时打印出实际代理的目标地址
  • 我用AI做数据分析之数据清洗
  • 滴水逆向_程序实现弹窗修改OEP
  • LeetCode 106.从中序与后序遍历序列构造二叉树
  • 团餐订餐系统源码企业订餐小程序写字楼办公区团餐软件开发
  • Redis03 - 高可用
  • 解决Redisson中“Unsupported protocol version 34”错误
  • PromptSource安装报错二
  • 最新Modular公司之MAX和Mojo作者 克里斯·拉特纳简介
  • 模拟用户在浏览器操作的脚本在 CentOS 7 运行出问题了!!!
  • 胶质瘤患者功能性磁共振成像数据分析的最佳方法
  • RestTemplate Https 证书访问错误
  • 【原创】Android Studio Ladybug 中Gradle配置
  • kafka服务端之分区管理
  • Linux之文件IO前世今生
  • C++基础 |右值引用、移动语义与完美转发
  • 模型 冗余系统(系统科学)
  • 数据结构及排序算法
  • Java反射机制:解锁Java编程的奥秘
  • netcore openTelemetry+prometheus+grafana
  • MIT 6.5940(一)
  • 用JavaScript实现异步锁