顺序表的实现示例

线性表的顺序实现例子

.h文件 此文件为方法
#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,失败时返回ERROR
Status 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));
    if(!L.elem)exit(OVERFLOW);
    L.length=0;
    L.listsize=LIST_INIT_SIZE;
    return OK;
    //-------------------------------------
}
//销毁整个表(从此之后不再可用)
Status DestroyList(SqList &L)
{
    free(L.elem);
    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 TRUE;
    else
    return FALSE;
    //-------------------------------------
}     

//求表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(ListEmpty(L))
    {
        printf("线性表L为空\n");
        return ERROR;
    }
    if(i<1||i>L.length)
    {
        printf("不存在%d位置的元素\n",i);
        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)
{
    // TODO (#1#): 在链表中插入元素
    if(i<1 || i>L.length+1)
        return ERROR;
     if (L.length >= L.listsize) //判读存储空间是否已满
    {
        ElemType * newbase = (ElemType *)realloc(L.elem, (L.listsize + LISTINCREMENT) * sizeof(ElemType));
        if (!newbase)
            exit(OVERFLOW);
        L.elem = newbase;
        LL.listsize = L.listsize + LISTINCREMENT;
    }
    ElemType *q = &(L.elem[i - 1]); //q指向第i个元素
    ElemType *p;                     //p指向最后一个元素     

    for (p= &(L.elem[L.length - 1]); p >= q; p--) //从最后一个位置开始移动
    {
        *(p + 1) = *p;
    }     

    *q = e;
    L.length++;
    return ERROR;
    //-------------------------------------
}     

//删除表L中第i个元素,结果用e返回. 操作成功返回OK,失败时返回ERROR
Status ListDelete(SqList &L, int i, ElemType &e)
{
    // TODO (#1#): 在顺序表中删除元素
if (L.length == 0) //判断表是否为空
    {
        printf("表为空\n");
        return ERROR;
    }     

    if (i < 1 || i > L.length) //判断删除位置是否合法
    {
        printf("删除位置不合法\n");
        return ERROR;
    }     

    ElemType *p = &(L.elem[i - 1]); //p指向待删除的元素
    e = *p;
    ElemType *q = &(L.elem[L.length - 1]);
    //ElemType *q = L->elem + L->length - 1; //q指向最后一个元素
    for (pp = p + 1; p <= q; p++) //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;
    //-------------------------------------
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索return
, 第i个元素
, 置空
, 顺序表
, 元素
, status
, length
, elem
, 返回结果是否成功
, 顺序
, l
, 顺序表实现
jquery_ajax返回error
顺序表查找算法的实现、数据结构顺序表的实现、c语言顺序表的实现、顺序表的实现、顺序表基本操作的实现,以便于您获取更多的相关知识。

时间: 2024-09-11 08:02:00

顺序表的实现示例的相关文章

&amp;quot;数据结构翻转课堂&amp;quot;答疑实录——顺序表

[说明] 本文是<数据结构>翻转课堂在线答疑的实录,由云班课的"答疑/讨论"功能中导出数据整理而成.. [重要提示] 下面的内容,按时间从后往前的顺序提供,请直接到文章末尾,倒着看更顺畅. [课程实践答疑实录] 焦梦真2015-09-20 11:19:20说 太难了 贺利坚2015-09-20 11:25:48答 练就将军本色之时到了.待回头看,江山本是如此多娇! 高露2015-09-19 15:14:50 用指针和线性表那一块... 王增亮2015-09-15 21:18

如何在C++中建立一个顺序表_C 语言

准备数据 复制代码 代码如下: #define MAXLEN 100 //定义顺序表的最大长度struct DATA{ char key[10]; //结点的关键字  char name[20]; int age;};struct SLType //定义顺序表结构 { DATA ListData[MAXLEN+1];//保存顺序表的结构数组 int ListLen;   //顺序表已存结点的数量 }; 定义了顺序表的最大长度MAXLEN.顺序表数据元素的类型DATA以及顺序表的数据结构SLTyp

硅谷杂志:Java中顺序表与向量应用浅析

[硅谷网12月11日文] 据<硅谷>杂志2012年第18期刊文,对顺序表与向量做简单介绍,着重比较两者的数据结构.容量增长.线程安全性和运行效率, 得出各自适用范围,并通过示例方便读者了解两者的应用. 程序设计语言中通过数组将若干同类型数据有序的集合在一起,各元素位置固定,元素个数就是数组的长度.但当集合中删除或 插入元素时,数组就显得捉襟见肘,c++使用链表,Java先是用向量(Vector),后又可通过顺序表(ArrayList)完成.Vector和ArrayList均可保存一列数据,并提

《数据结构与算法:Python语言描述》一3.2顺序表的实现

3.2顺序表的实现 顺序表的基本实现方式很简单:表中元素顺序存放在一片足够大的连续存储区里,首元素(第一个元素)存入存储区的开始位置,其余元素依次顺序存放.元素之间的逻辑顺序关系通过元素在存储区里的物理位置表示(隐式表示元素间的关系). 3.2.1基本实现方式 最常见情况是一个表里保存的元素类型相同,因此存储每个表元素所需的存储量相同,可以在表里等距安排同样大小的存储位置.这种安排可以直接映射到计算机内存和单元,表中任何元素位置的计算非常简单,存取操作可以在O(1) 时间内完成. 设有一个顺序表

顺序存储线性表-数据结构顺序表的操作(c++)

问题描述 数据结构顺序表的操作(c++) 求解答谢谢 解决方案 贴出代码而不是截图.发了帖子你难道自己不看下.这么小的字根本看不清. 解决方案二: 什么是线性表?定义:由n(n>=0)个数据类型相同的数据元素组成的有限序列.特点是:在数据元素的非空有限集合中,除第一个元素无直接前驱,最后一个元素无直接后继外,集合中其余每个元素均有唯一的直接前驱和直接后继.什么是顺序表,在这里回答一下.顺序表就是线性表的顺序存储,其特点是:物理顺序与逻辑顺序是相同的,关系线性化,结点顺序存.线性表顺序存储的表示?

数据结构教程 第二十九课 静态查找表(一)顺序表的查找

教学目的: 掌握查找的基本概念,顺序表查找的性能分析 教学重点: 查找的基本概念 教学难点: 顺序表查找的性能分析 授课内容: 一.查找的基本概念 查找表: 是由同一类型的数据元素(或记录)构成的集合. 查找表的操作: 1.查询某个"特定的"数据元素是否在查找表中.2.检索某个"特定的"数据元素的各种属性.3.在查找表中插入一个数据元素:4.从查找表中刪去某个数据元素. 静态查找表 对查找表只作前两种操作 动态查找表 在查找过程中查找表元素集合动态改变 关键字 是数

C#实现顺序表

这几天需要实现各种数据结构(泛型).主要实现线性表和链表. 线性表是由n(n>=0)个相同类型的数据元素构成的有限序列.除第一个元素外,其余元素只有一个直接前驱;除最后一个元素外,其余元素只有一个直接后继. 顺序表是把表中元素一个接一个地放进一快地址连续的空间,因此顺序表的实现有数组来完成. 由于这次需要实现多种数据结构,各种数据结构都有相同的方法,比如求长度,清空等.因此定义一个公共接口: namespace DateStructrues { public interface IDS<T&g

js禁止回车提交表单的示例代码

 本篇文章主要是对js禁止回车提交表单的示例代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 如下所示;  代码如下: function ifenter(){    if(event.keyCode==13){   return   false;   }else if(event.srcElement.type=="submit"){    form1.submit();    }   }    document.onkeydown=ifenter;    

写入时冲突-用c语言建立一个顺序表,并且对表进行操作

问题描述 用c语言建立一个顺序表,并且对表进行操作 写了个小程序,目的要求:用c语言建立一个顺序表,表中元素为学生,每个学生信息包含姓名.学号和成绩三部分,对该表实现:① 输出.② 插入.③ 删除.④ 查找功能,并计算出平均成绩和总成绩 感觉我的代码没什么问题,编译也正常通过,但是每次运行都会出现这样的问题,不知道是什么原因,希望又高手能帮忙解答下,谢了 #include#include void chu(int a); void zhao(int a);void cha(int a); voi