C语言实现顺序表
来源:互联网 发布:免费的crm软件 编辑:程序博客网 时间:2024/06/06 03:17
数据结构是个很难学的东西。首先概念上十分抽象,不容易理区分和理解;其次初学者实现起来很困难,书上一般给的程序不是伪代码,就是不完整的代码,想要上机做实验有很大问题。所以学习过程中稍微遇上点麻烦就很容易放弃。鉴于自己在学习数据结构的痛苦经历特地分享一下自己的完整代码,希望能对新手提供一些微小的帮助。
#include <stdio.h>#include <stdlib.h>typedef enum {true, false} bool;typedef struct Arr{ int *pBase; int len; int cnt;}Array, *pArray;//函数声明void init_arr(pArray parr, int len);//生成一个顺序表bool is_empty(pArray parr);//判断顺序表是否为空bool is_full(pArray parr);//判断顺序表是否为满bool append_arr(pArray parr, int val);//追加一个元素void show_arr(pArray parr);//打印顺序表bool insert_arr(pArray parr, int pos, int val);//在第pos的位置插入valbool delete_arr(pArray parr, int pos, int *pVal);//删除第pos个元素int get(pArray parr, int pos);//得到第pos个元素值void inversion(pArray parr);//倒转顺序表void sort_arr(pArray parr);//顺序表的排序int main(int argc, const char * argv[]) { Array arr; int val, getval; init_arr(&arr, 6); append_arr(&arr, 13); append_arr(&arr, 4); append_arr(&arr, 34); append_arr(&arr, 6); show_arr(&arr); insert_arr(&arr, 2, 99); show_arr(&arr); if (delete_arr(&arr, 2, &val)==true) { printf("删除成功,删除的数据为:%d\n", val); }else{ printf("删除失败"); } show_arr(&arr); getval = get(&arr, 4); printf("得到的值为:%d\n", getval); inversion(&arr); show_arr(&arr); sort_arr(&arr); show_arr(&arr); return 0;}void init_arr(pArray parr, int len){ parr->pBase = (int *)malloc(sizeof(int)*len); if (parr->pBase == NULL) { printf("内存分配失败\n"); exit(-1); }else{ parr->len = len; parr->cnt = 0; } return;}bool is_empty(pArray parr){ if (parr->cnt == 0) { return true; }else return false;}bool is_full(pArray parr){ if (parr->cnt == parr->len) { return true; }else return false;}bool append_arr(pArray parr, int val){ if (is_full(parr) == true) { return false; }else{ parr->pBase[parr->cnt] = val; parr->cnt++; } return true;}void show_arr(pArray parr){ if (is_empty(parr) == true) { printf("顺序表为空!\n"); exit(-1); }else{ for (int i=0; i<parr->cnt; i++) { printf("%d ", parr->pBase[i]); } } printf("\n"); return;}bool insert_arr(pArray parr, int pos, int val){ if (is_full(parr) == true) { return false; } if (pos<1 || pos>parr->cnt+1) { return false; } for (int i = parr->cnt-1; i>=pos-1; i--) { parr->pBase[i+1] = parr->pBase[i]; } parr->pBase[pos-1] = val; (parr->cnt)++; return true;}bool delete_arr(pArray parr, int pos, int *pVal){ if (is_empty(parr) == true) { return false; } if (pos<1 || pos>parr->cnt) { return false; } *pVal = parr->pBase[pos-1]; for (int i=pos; i<parr->cnt; i++) { parr->pBase[i-1]=parr->pBase[i]; } (parr->cnt)--; return true;}int get(pArray parr, int pos){ if (is_empty(parr) == true) { return false; } if (pos<1 || pos>parr->cnt) { return false; } return parr->pBase[pos-1];}void inversion(pArray parr){ if (is_empty(parr) == true) { printf("顺序表为空!\n"); exit(-1); }else{ int i = 0; int j = parr->cnt-1; int t; while (i<j) { t = parr->pBase[i]; parr->pBase[i] = parr->pBase[j]; parr->pBase[j] = t; i++; j--; } } return;}void sort_arr(pArray parr){ int i, j, t; for (i=0; i<parr->cnt; i++) { for (j=i+1; j<parr->cnt; j++) { if (parr->pBase[i] > parr->pBase[j]) { t = parr->pBase[i]; parr->pBase[i] = parr->pBase[j]; parr->pBase[j] = t; } } } return;}
阅读全文
0 0
- C语言实现顺序表
- 顺序表c语言实现
- c语言实现顺序表
- C语言实现顺序表
- C语言实现顺序表
- C语言实现顺序表
- C语言实现顺序表
- C语言实现顺序表
- C语言实现顺序表
- C语言实现顺序表
- c语言实现顺序表
- C语言实现顺序表
- C语言实现顺序表
- C语言实现顺序表
- C语言实现顺序表
- C语言实现顺序表
- C语言实现顺序表
- C语言实现顺序表
- HTML5伪类选择器
- Pixhawk入门指南-目录
- 【Android】Percent Support Library实践
- 大数据名词分析
- 公众号编辑器开发,实现编辑器前端页面
- C语言实现顺序表
- 在tomcat里为多个应用配置不同的访问端口
- (14)文件上传
- Objective-C学习总结#2——预处理
- 二维数组根据某个相同的值归类
- CSS3 盒布局
- POJ2255
- 浅谈jquery对象和DOM对象
- 关于引入别人的ASdemo解决gredle版本问题