#include <cstdio> #include <cstdlib> #include <iostream>
using namespace std;
#define InitSize 1000 typedef int ElemType;
typedef struct { ElemType *data; int length; int MaxSize; } SeqList;
int InitList(SeqList &L) { L.data = (ElemType *) malloc(InitSize * sizeof(ElemType)); if (L.data == nullptr) { printf("内存分配错误!\n"); return 0; } L.length = 0; L.MaxSize = InitSize; printf("内存分配成功!\n"); return 1; }
int ListInsert(SeqList &L, int i, ElemType e) { if (i < 1 || i > L.length + 1) { printf("插入位置不合理!\n"); return 0; } if (i >= L.MaxSize) { printf("存储空间已满!\n"); return 0; } for (int j = L.length; j >= i; j--) { L.data[j] = L.data[j - 1]; } L.data[i - 1] = e; L.length++; return 1; }
int ListDelete(SeqList &L, int i, ElemType &e) { if (i < 1 || i > L.length + 1) { printf("删除位置不合理!\n"); return 0; } e = L.data[i - 1]; for (int j = i; j <= L.length; j++) { L.data[j - 1] = L.data[j]; } L.length--; return e; }
int ListLength(SeqList &L) { if (L.length == 0) { printf("元素个数为0"); return 0; } int count = 0; for (int i = 0; i < L.length; i++) { if (L.data[i]) { count++; } } return count; }
int locateElem(SeqList &L, ElemType e) { for (int i = 0; i < L.length; i++) { if (L.data[i] == e) { return i + 1; } } return 0; }
int GetElem(SeqList &L, int i) { if (i < 1 || i > L.length) { return 0; } return L.data[i - 1]; }
void PrintList(SeqList L) { if (L.length == 0) { cout << "顺序表为空"; exit(1); } printf("顺序表如下:"); for (int i = 0; i < L.length; i++) { printf(" %d", L.data[i]); } cout << endl; }
int test1(SeqList &L, ElemType &value) { if (L.length == 0) { return false; } value = L.data[0]; int pos = 0; for (int i = 0; i < L.length; i++) { if (L.data[i] < value) { value = L.data[i]; pos = i; } } L.data[pos] = L.data[L.length - 1]; L.length--; return true; }
void test2(SeqList &L) { ElemType temp; for (int i = 0; i < L.length / 2; i++) { temp = L.data[i]; L.data[i] = L.data[L.length - i - 1]; L.data[L.length - i - 1] = temp; } }
void test3(SeqList &L, ElemType x) {
int k = 0; for (int i = 0; i < L.length; i++) { if (L.data[i] != x) { L.data[k] = L.data[i]; k++; } } L.length = k;
}
int test4(SeqList &L, ElemType s, ElemType t) { int i, j; if (s >= t || L.length == 0) return false; for (i = 0; i < L.length && L.data[i] < s; i++); if (i >= L.length) return false; for (j = i; j < L.length && L.data[j] <= t; j++); for (; j < L.length; i++, j++) L.data[i] = L.data[j]; L.length = i; return true; }
int test5(SeqList &L, ElemType s, ElemType t) { int i, k = 0; if (L.length == 0 || s >= t) return false; for (i = 0; i < L.length; i++) { if (L.data[i] >= s && L.data[i] <= t) k++; else L.data[i - k] = L.data[i]; } L.length -= k; return true; }
int test6(SeqList &L) {
if (L.length == 0) return 0; int i, k = 0; for (i = 1; i < L.length; i++) { if (L.data[i] == L.data[i - 1]) { k++; } else { L.data[i - k] = L.data[i]; } } L.length -= k; return 1;
}
int test7(SeqList &L1, SeqList &L2, SeqList &L3) { if (L1.length + L2.length > L3.MaxSize) { return false; } int i = 0, j = 0, k = 0; while (i < L1.length && j < L2.length) { if (L1.data[i] <= L2.data[j]) { L3.data[k++] = L1.data[i++]; } else { L3.data[k++] = L2.data[j++]; } } while (i < L1.length) { L3.data[k++] = L1.data[i++]; } while (j < L2.length) { L3.data[k++] = L2.data[j++]; } L3.length = k; return true; }
void Reverse(ElemType A[], int left, int right, int ArraySize) { if (left >= right || right >= ArraySize) { return; } int mid = (left + right) / 2; for (int i = 0; i < mid - left; i++) { ElemType temp = A[i]; A[i] = A[right - i]; A[right - 1] = temp; } }
void test8(ElemType A[], int m, int n, int ArraySize) { Reverse(A, 0, m + n - 1, ArraySize); Reverse(A, 0, n - 1, ArraySize); Reverse(A, n, m + n - 1, ArraySize); }
int test8(ElemType A[], ElemType x, int n) { int low = 0, high = n - 1, mid; mid = (low + high) / 2; while (low <= high) { if (A[mid] == x) break; else if (A[mid] < x) low = mid + 1; else high = mid - 1; } if (A[mid] == x && mid != n - 1) { int t = A[mid]; A[mid] = A[mid + 1]; A[mid + 1] = t; } if (low > high) { int i = 0; for (i = n - 1; i > high; i--) { A[i + 1] = A[i]; } A[i + 1] = x; } return true; }
int main() { SeqList L; InitList(L); int i, e; cout << "请输入元素个数:"; cin >> L.length; for (i = 0; i < L.length; i++) { scanf("%d", &L.data[i]); } PrintList(L);
return 0; }
|