数据结构的一些基本操作(在表L中插入第i个元素e. 操作成功返回OK,失败时返回ERROR,删除表L中第i个元素,结果用e返回. 操作成功返回OK,失败时返回ERROR)
来源:互联网 发布:c语言相关书籍 编辑:程序博客网 时间:2024/05/16 10:22
/* Name: sqlist.h Copyright: Author: Date: 21-03-05 20:21 Description: */#ifndef SQLIST_H_INCLUDED#define SQLIST_H_INCLUDED#include "ds.h" //for Status,OK ...#ifndef ElemType#define ElemType int /* 数据元素类型默认为 int */#define ELEMTYPE_TAG#endif/*********************************************************** 顺序表的存储结构定义 ***********************************************************/#define LIST_INIT_SIZE 100 /* 存储空间初始分配容量 */#define LISTINCREMENT 10 /* 存储空间分配的增量 */typedef struct { ElemType *elem; //存储空间基址 int length; //当前长度 int listsize; //当前已分配的存储空间(元素个数) } SqList;/*********************************************************** 顺序表的基本操作声明***********************************************************///创建并初始化为空表 Status InitList(SqList &L);//销毁整个表(从此之后不再可用) Status DestroyList(SqList &L);//将表L置空 Status ClearList(SqList &L);//判断表L是否为空表 bool ListEmpty(SqList L);//求表L的长度 int ListLength(SqList L);//取表L中的第i个元素,并用e返回. 操作成功返回OK,失败时返回ERROR Status GetElem(SqList L, int i, ElemType &e);template <typename T> bool equal(T a, T b){ return a==b;}//在表L中定位元素e首次出现的位置. 操作成功返回位序,失败时返回0 // compare(a,b) 为比较函数,匹配时返回true,否则返回false // 这里默认使用equal进行比较 int LocateElem(SqList L, ElemType e, bool (*compare)(ElemType,ElemType)=equal<ElemType>);//在表L中插入第i个元素e. 操作成功返回OK,失败时返回ERRORStatus ListInsert(SqList &L, int i, ElemType e);//删除表L中第i个元素,结果用e返回. 操作成功返回OK,失败时返回ERROR Status ListDelete(SqList &L, int i, ElemType &e);//遍历表L,对每个元素调用visit(x). Status ListTraverse(SqList L, Status (*visit)(ElemType)); /*********************************************************** 顺序表的基本操作的实现***********************************************************///创建并初始化为空表 Status InitList(SqList &L){ // TODO (#1#): 创建空表 L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));L.length=0;L.listsize=LIST_INIT_SIZE; return ERROR; //-------------------------------------}//销毁整个表(从此之后不再可用) Status DestroyList(SqList &L){ // TODO (#1#): 销毁表 if(L.elem){free(L.elem); return OK;}else return ERROR; //-------------------------------------}//将表L置空 Status ClearList(SqList &L){ // TODO (#1#): 清空表if(L.elem==NULL){ L.length=0;return OK;}else return ERROR; //-------------------------------------}//判断表L是否为空表 bool ListEmpty(SqList L){ // TODO (#1#): 顺序表判空 if(L.elem!=NULL) return false;return OK; //-------------------------------------}//求表L的长度 int ListLength(SqList L){ // TODO (#1#): 求顺序表长度 return L.length; //-------------------------------------}//取表L中的第i个元素,并用e返回. 操作成功返回OK,失败时返回ERROR Status GetElem(SqList L, int i, ElemType &e){ // TODO (#1#): 取元素 if( i > 0 && i <= L.length ) 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,失败时返回ERRORStatus ListInsert(SqList &L, int i, ElemType e){int j;if(i<1||i>L.length+1)return ERROR;for(j=L.length-1;j>=i-1;j--)L.elem[j+1]=L.elem[j];L.elem[i-1]=e; ++L.length; return OK; // TODO (#1#): 在链表中插入元素 //-------------------------------------}//删除表L中第i个元素,结果用e返回. 操作成功返回OK,失败时返回ERROR Status ListDelete(SqList &L, int i, ElemType &e){ElemType *p,*q; // TODO (#1#): 在顺序表中删除元素if(i<1||i>L.length+1)return ERROR;p=L.elem+i-1;e=*p;q=L.elem+L.length-1; for(++p;p<=q;++p)*(p-1)=*p;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; //-------------------------------------}#ifdef ELEMTYPE_TAG#undef ElemType#undef ELEMTYPE_TAG#endif#endif // SQLIST_H_INCLUDED
运行截图
阅读全文
0 0
- 数据结构的一些基本操作(在表L中插入第i个元素e. 操作成功返回OK,失败时返回ERROR,删除表L中第i个元素,结果用e返回. 操作成功返回OK,失败时返回ERROR)
- 删除顺序表L中最小元素结点,并通过引用型参数value返回其值 如果删除成功,返回TRUE,否则,返回false
- 删除线性表L中第i个元素起的k个元素
- 返回线性链表的倒数第n个元素
- 在有序表R[0..n-1]中进行二分查找,成功时返回结点的位置,失败时返回-1
- 算法与数据结构--在顺序线性表L中查找第1个值与e满足compare()的元素的为序--算法2.5
- 算法与数据结构--在顺序线性表L中查找第1个值与e满足compare()的元素的为序--算法2.5
- 数据结构之算法2.6-在顺序线性表L中查找第1个值与e满足compare()的元素的位序
- 单链表--在第i个位置前插入元素e
- 在子控制器中,怎么直接返回首页(tabbar第0个元素)
- Retrofit返回结果成功与失败相反
- ###(很难找的页面错误)查询操作不需要 返回 操作成功后失败。【方法不能同时执行两个response返回两次数据。导致页面显示数据失败】
- Python实现返回数组第i小的元素
- sqlite数据删除失败,插入成功返回-1
- 数据结构 P38 算法实现 在带头结点的单链表的第i个元素插入元素e
- FTP操作失败返回码
- 调用接口返回失败时的必要操作
- 设计函数返回一个数组中所有元素被第一个元素除的结果
- Postgres中FSM及VM文件说明
- C语言中的time函数总结
- POJ2385 Apple Catching
- 总结
- 机器学习 第一章 绪论
- 数据结构的一些基本操作(在表L中插入第i个元素e. 操作成功返回OK,失败时返回ERROR,删除表L中第i个元素,结果用e返回. 操作成功返回OK,失败时返回ERROR)
- 单链表——SList
- linux 多线程信号量和互斥锁的使用
- oos 私有bucket 获取访问链接
- 常用编程语言开发工具
- PL/SQL Developer的安装
- HGDB psql中\g执行上一条SQL
- re
- csdn 无法下载资源了,这是无语