数据结构——数组
来源:互联网 发布:淘宝怎么设置客服 编辑:程序博客网 时间:2024/05/22 07:45
说明:严蔚敏的《数据结构》(C语言版)学习笔记,记录一下,以备后面查看。
ElemType *elem记录第一个元素的地址,也就是数组的首地址(基地址)
int length 是实际数组中数据的长度
int listsize 是给数组分配的空间长度
#include <stdio.h>#include <malloc.h>#include <stdlib.h>#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量#define LISTINCREMENT 10 //线性表存储空间的分配增量const int OK = 1; //定义正确返回const int ERROR = -1; //定义错误的返回const int OVERFLOW = -2; //定义溢出//定义元素类型typedef int ElemType;//定义返回类型typedef int Status;//定义一个线性的数组结构typedef struct{ElemType *elem; int length;int listsize;} SqList;//初始化列表Status InitList_Sq(SqList &L){//构造一个空的线性表LL.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));if(!L.elem) exit(OVERFLOW); //存储分配失败L.length = 0; //实际元素长度是0L.listsize = LIST_INIT_SIZE;//分配的长度(字节)return OK;}//插入元素//插入数组中下标为i的位置Status ListInsert_Sq(SqList &L, int i, ElemType e){ElemType *newbase;//在顺序线性表L中第i个位置之前插入新的元素eif(i<1 || i>L.length+1) return ERROR; //i 值不合法if(L.length >= L.listsize){ //如果数组元素满了就扩展newbase = (ElemType *)realloc(L.elem, (L.listsize + LISTINCREMENT) * sizeof(ElemType));if(!newbase) exit(OVERFLOW);L.elem = newbase; //新基址L.listsize += LISTINCREMENT; //增加存储容量} ElemType *q = &(L.elem[i - 1]); //取到数组中第i个元素的地址赋给指针qElemType *p;//从i+1元素位置开始向后移动元素for(p = &(L.elem[L.length - 1]); p>=q; --p) *(p+1) = *p;*q = e;++L.length;return OK;}//添加元素Status ListAdd_tail(SqList &L, ElemType e){ElemType *newbase;if(L.length >= L.listsize){newbase = (ElemType *)realloc(L.elem, (L.listsize + LISTINCREMENT) * sizeof(ElemType));if(!newbase) exit(OVERFLOW);L.elem = newbase;L.listsize += LISTINCREMENT;}L.elem[L.length] = e;++L.length;return OK;}//删除元素ElemType ListRemove_Sq(SqList &L, int i){if(i<0 || i>=L.length) return ERROR;ElemType *p;//将第i个元素后面的所有元素向前移动一位for(p = &(L.elem[i]); p<&(L.elem[L.length - 1]); ++p) *p = *(p+1);--L.length;return OK;}//遍历元素void showList(const SqList &L){ int i;for(i=0; i<L.length; i++){ printf("%d\n", L.elem[i]);}}int main(){SqList sq;InitList_Sq(sq);ElemType et1 = 3;ElemType et2 = 4;ListInsert_Sq(sq,1,et1);ListInsert_Sq(sq,2,et2);ListAdd_tail(sq, et1);ListAdd_tail(sq, et1);ListAdd_tail(sq, et1);ListAdd_tail(sq, et2);ListRemove_Sq(sq, 1);showList(sq);scanf("%d");return 0;}
值得思考的问题:
1、为什么传引用?
2、什么时候应该什么成const?
3、结构体的初始化
4、静态存储区和动态存储区的特点和区别
1 0
- 数据结构——数组
- 数据结构——数组
- 数据结构——数组
- 数据结构 —— 数组
- 数据结构——数组
- 数据结构—树状数组
- 《数组——数据结构JAVA》
- 数据结构——树状数组
- 数据结构上机——数组
- 数据结构—向量(vector)-数组
- 利用数组实现数据结构——栈
- 类作为数据结构——数组
- 数据结构——字符串和多维数组
- [数据结构]非线性结构——多维数组
- 数据结构入门——动态数组
- 数据结构实践——队列数组
- 数据结构实践——队列数组
- 数据结构与算法 —— 动态数组
- 微信公众开发PHP各类菜单点击事件回应
- 第14周项目5-体会棋盘游戏中的数据存储
- 网络图形标准
- Sort Colors,Search in Rotated Sorted Array I,II,Merge Intervals,Insert Interval,Subsets II
- 关于window8安装应用出现2503
- 数据结构——数组
- IOS导航隐藏下边的线
- Linux下Gcc生成和使用静态库和动态库及相关问题总结
- 【Android】Fragment(一)- 生命周期
- xcode armv6 armv7 armv7s arm64 的意义
- Hadoop Compression解压缩架构的学习
- 算法优化案例_转载
- 给定数字的全部组合实现方式
- ubuntu下ruby文件执行蛋疼的一个问题