线性表的顺序存储结构的基本操作
2017-09-17 11:12
260 查看
代码演示:
/********************************************************** * 顺序表的基本操作的实现 ***********************************************************/ //创建并初始化为空表 Status InitList(SqList &L) { // TODO (#1#): 创建空表 L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if(!L.elem){exit(ERROR);} L.length=0; L.listsize=LIST_INIT_SIZE; return OK; //------------------------------------- } //销毁整个表(从此之后不再可用) Status DestroyList(SqList &L) { // TODO (#1#): 销毁表 L.elem=NULL; return OK; //------------------------------------- } //将表L置空 Status ClearList(SqList &L) { // TODO (#1#): 清空表 L.length=0; return OK; //------------------------------------- } //判断表L是否为空表 bool ListEmpty(SqList L) { // TODO (#1#): 顺序表判空 if(L.length==0){ return OK; } else{ return false; //------------------------------------- } //求表L的长度 int ListLength(SqList L) { // TODO (#1#): 求顺序表长度 int n=L.length; return n; //------------------------------------- } //取表L中的第i个元素,并用e返回. 操作成功返回OK,失败时返回ERROR Status GetElem(SqList L, int i, ElemType &e) { // TODO (#1#): 取元素 if(L.length==0&&i<L.length&&i<0){ return ERROR; } e=L.elem[i-1]; return OK; //------------------------------------- } //在表L中定位元素e首次出现的位置. 操作成功返回位序,失败时返回0 // compare(a,b) 为比较函数,匹配时返回true,否则返回false int LocateElem(SqList L, ElemType e, bool (*compare)(ElemType,ElemType)) { // TODO (#1#): 在表中定位元素e,用compare(a,b)匹配元素 for (int j=0; j<L.length; j++) if ( compare(L.elem[j],e) ) return j+1; return 0; //------------------------------------- } //在表L中插入第i个元素e. 操作成功返回OK,失败时返回ERROR Status ListInsert(SqList &L, int i, ElemType e) { ElemType *newbase; // TODO (#1#): 在链表中插入元素 if(i<1||i>L.length+1){ return ERROR; } if(L.length>=L.listsize){ newbase=(ElemType *) realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType)); if(!newbase){ exit(ERROR); } } L.elem=newbase; L.listsize+=LISTINCREMENT; for(int j=L.length;j>=i;j--){ L.elem[j]=L.elem[j-1]; } L.elem[i-1]=e; ++L.length; return OK; //------------------------------------- } //删除表L中第i个元素,结果用e返回. 操作成功返回OK,失败时返回ERROR Status ListDelete(SqList &L, int i, ElemType &e) { // TODO (#1#): 在顺序表中删除元素 if(i<1||i>L.length) { return ERROR; } e=L.elem[i-1]; for(j=i;j<L.length;j++){ L.elem[j-1]=L.elem[j]; } --L.length; return OK; //------------------------------------- } //遍历表L,对每个元素调用visit(x). Status ListTraverse(SqList L, Status (*visit)(ElemType)) { // TODO (#1#): 遍历顺序表 for (int j=0; j<L.length; j++) if ( ! visit(L.elem[j]) ) return ERROR; return OK; //------------------------------------- }
相关文章推荐
- 编程实现顺序存储结构和链式存储结构线性表的建立、查找、插入、删除等基本操作
- 学习笔记——线性表的动态分配顺序存储结构基本操作(C语言实现)
- 数据结构学习---线性表顺序存储结构的基本操作
- 线性表的基本操作:插入、删除、查找等操作在顺序存储结构和链接存储结构上的算法
- 学习笔记——线性表的静态分配顺序存储结构基本操作(C语言实现)
- Problem D: 线性表的基本操作
- 线性表的链式存储基本操作
- C语言实现线性表之顺序存储结构操作
- 线性表的基本操作及其作用
- 10.线性表之数组的基本操作
- 线性单链表的存储及基本操作(整理)
- 数据结构中线性表的基本操作-合并两个线性表-依照元素升序排列
- 串的定长顺序存储结构:实现串的基本操作Replace(&S,T,V)
- 顺序存储结构的基本操作实现(以类的方式实现)----插入、删除、查询
- 数组实现的线性表的基本操作2[C语言]
- 线性链表的基本操作
- 2.1 线性表的定义、逻辑结构、基本操作
- 线性表的顺序表示和实现基本操作之插入元素
- Problem H: 线性表的基本操作
- 线性表的顺序存储结构与操作