C++ 顺序表练习

发布于:2025-02-10 ⋅ 阅读:(72) ⋅ 点赞:(0)

代码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;
}