这是一个以数组为核心的线性表,对于结构体的定义一定不要闷逼,仔细观察 这个算法的有个缺点就是不能随心所欲的插入,(个人比较懒没写)
#include#include #include struct Arr { int* pbase;//存储数组的第一个元素 int len;//数组所能容纳的最大元素 int cnt;//当前有效元素 }; void init_arr(struct Arr* pArr, int lenth);//初始化 bool append_arr(struct Arr* pArr, int var);//追加 bool insert_arr(struct Arr* pArr, int pos, int var);//pos是插入的位置 bool delete_arr(struct Arr* pArr, int pos,int *pVal); int get(); bool is_empty(struct Arr* pArr);//检查是否为空 bool is_empty(struct Arr* pArr);//是否满了 void sort_arr();//排序 void show_arr(struct Arr* pArr);//显示 void inversion(struct Arr* pArr);//倒置 int main() { struct Arr arr; int val; init_arr(&arr, 6); show_arr(&arr); append_arr(&arr, 1); append_arr(&arr, 2); append_arr(&arr, 3); append_arr(&arr, 4); append_arr(&arr, 5); inversion(&arr); show_arr(&arr); show_arr(&arr); delete_arr(&arr, 2, &val); show_arr(&arr); return 0; } void init_arr(struct Arr* pArr, int lenth) { pArr->pbase = (int*)malloc(sizeof(int) * lenth); if (NULL == pArr->pbase) { printf("动态内存分配失败n"); exit(-1);//终止整个程序 } else { pArr->len = lenth; pArr->cnt = 0; } return;//告诉调用的人程序终止,无意义。 } void show_arr(struct Arr* pArr) { if (is_empty(pArr)) { printf("数组为空n"); } else { for (int i=0; i < pArr->cnt; ++i) { printf("%d ", pArr->pbase[i]); } printf("n"); } } bool is_empty(struct Arr* pArr) { if (pArr->cnt == 0) { return true; } else { return false; } } bool is_full(struct Arr* pArr) { if (pArr->cnt == pArr->cnt) { return false; } else { return true; } } bool append_arr(struct Arr* pArr,int var) { if (is_full(pArr)) { return false; } pArr->pbase[pArr->cnt] = var; pArr->cnt++; return true; } bool insert_arr(struct Arr* pArr, int pos, int var) { if (is_full(pArr)) return false; if (pos<1 || pos > pArr->cnt+1) { return false; } for (int i = pArr->cnt; i >= pos - 1; --i) { pArr->pbase[i + 1] = pArr->pbase[i]; } pArr->pbase[pos - 1] = var; return true; } bool delete_arr(struct Arr* pArr, int pos, int* pVal) { if (is_full(pArr)) return false; if (pos<1 || pos > pArr->cnt + 1) { return false; } *pVal = pArr->pbase[pos - 1]; for (int i = pos; i < pArr->cnt; i++) { pArr->pbase[i - 1] = pArr->pbase[i]; } pArr->cnt -= 1; return true; } void inversion(struct Arr* pArr) {//线性表倒置倒置 int i = 0; int j = pArr->cnt - 1;//这样就不需要考虑奇偶 while (i < j) { int t = pArr->pbase[i]; pArr->pbase[i] = pArr->pbase[j]; pArr->pbase[j] = t; ++i; j--; } return; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)