顺序表操作
#include<iostream>using namespace std;#define maxsize 20 typedef struct{ int data[maxsize]; int last;}SeqList; // 顺序表初始化SeqList *init_seqList(){ SeqList *L; L = new SeqList(); L->last = -1; return L;} // 插入操作int insert_seqList(SeqList *L, int i, int x){ int j; if(L->last == maxsize-1){ cout<<"表满"<<endl; return -1; } if(i<1 || i>L->last+2){ cout<<"插入位置错"<<endl; } for(j = L->last; j>i-1;j--){ L->data[j+1] = L->data[j]; // 节点移动 } L->data[i-1] = x; L->last++; return 1;} // 时间复杂度O(n), 移动 n-i+1个元素 // 删除int delete_SeqList(SeqList *L, int i){ // 删除的是第几个元素,下标减一 int j; if(i<1 || i>L->last+1){ cout<<"不存在"<<endl; } for(int j=i;j<=L->last;j++){ L->data[j-1] = L->data[j]; } L->last--; return 1;} // 复杂度O(n) // 查找 int location_SeqList(SeqList *L, int x){ int i=0; while(i<=L->last && L->data[i] != x){ i++; } if(i>L->last) return -1; else return i;} // (n+1)/x 的平均比较// 应用举例 // 划分算法 void part(SeqList *L) { int i, j; int x, temp; x = L->data[0]; // 将基准值置于x中 i = 1; // i从1开始,j从L->last位置开始 j = L->last; while (i <= j) { // 寻找比基准大的元素 while (i <= L->last && L->data[i] < x) { i++; } while (j >= 0 && L->data[j] >= x) { // 寻找比基准小的元素 j--; } if (i < j) { // 交换找到的元素,直到i和j交错 temp = L->data[i]; L->data[i] = L->data[j]; L->data[j] = temp; } } L->data[0] = L->data[j]; // 最后将基准元素放置到正确的位置 L->data[j] = x;} // 时间复杂是O(n) // 顺序表合并void merge(SeqList *A, SeqList *B, SeqList *C){ int i,j,k; i=0;j=0;k=0; while(i<=A->last && j<=B->last){ if(A->data[i] < B->data[j]) C->data[k++] = A->data[i++]; else C->data[k++] = B->data[j++]; } while(i<=A->last) C->data[k++] = A->data[i++]; while(j<=B->last) C->data[k++] = B->data[j++]; C->last = k-1; // k会多加一次 } // 复杂度O(m+n) int main(){ SeqList *L; L = init_seqList(); // 大小为20 return 0;}