数据结构的一些基本操作(在表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
原创粉丝点击