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