首页 > 其他分享 >顺序表的实现

顺序表的实现

时间:2022-10-12 19:44:07浏览次数:37  
标签:顺序 实现 Sq elem int length SqList

 

 

函数接口定义:

顺序表描述的结构体为
typedef struct {
    ElemType *elem; //存储空间的基地址
    int length; //当前长度
} SqList;

需要实现函数的接口分别为:

int GetElem(SqList L, int i, ElemType &e)  顺序表的取值
判断i值是否合理,若不合理,返回0;[i-1]单元存储第i个数据元素; 返回1

int LocateElem_Sq(SqList L, double e) 顺序表的查找
查找成功,返回序号i+1;查找失败,返回0

int ListInsert_Sq(SqList &L, int i, ElemType e)顺序表的插入
判断i值,不合法返回0;当前存储空间已满,返回0;插入位置及之后的元素后移;将新元素e放入第i个位置;表长增1;返回1

int ListDelete_Sq(SqList &L, int i)顺序表的删除
判断i值,不合法返回0;被删除元素之后的元素前移;表长减1;返回1

void ListInput(SqList &L)顺序表数据的输入
输入顺序表长度;依次输入数据;表长赋值

void ListOutput(SqList L)顺序表数据的输出

裁判测试程序样例:

 

#include<iostream>
#include<string>
#include<iomanip>
#include <cstdlib>
using namespace std;

#define OVERFLOW -2
 typedef int ElemType; //ElemType 为可定义的数据类型,此设为int类型

#define MAXSIZE 100            //顺序表可能达到的最大长度

typedef struct {
    ElemType *elem; //存储空间的基地址
    int length; //当前长度
} SqList;

void InitList_Sq(SqList &L) { //算法2.1 顺序表的初始化
    //构造一个空的顺序表L
    L.elem = new ElemType[MAXSIZE]; //为顺序表分配一个大小为MAXSIZE的数组空间
    if (!L.elem)
        exit(OVERFLOW); //存储分配失败退出
    L.length = 0; //空表长度为0

}


/* 请在这里填写答案 */

int main() {
    SqList L;
    int i = 0, temp, a, c;
    double price;
    ElemType e;
    //初始化线性表
      InitList_Sq(L);
     //输入线性表

            ListInput(L);
    //输出线性表
            ListOutput(L);
    //顺序表取值
            cin>>i;
            temp = GetElem(L, i, e);
            if (temp != 0) {
                cout <<"查找位置的数是"<<e<< endl;
            } else
                cout << "查找失败!位置超出范围\n";
    //顺序表查找

            cin >> price;
            temp = LocateElem_Sq(L, price);
            if (temp != 0) {

                cout << "该数位置为" << temp << endl;
            } else
                cout << "查找失败!\n";

        //顺序表的插入

            cin >> a;
            cin >> e; //输入a和e,a代表插入的位置,e代表插入的数值
            if (ListInsert_Sq(L, a, e))
                  ListOutput(L);
            else
                cout << "插入失败\n";
      
            //顺序表的删除

            cin >> c;
            if (ListDelete_Sq(L, c))
                 ListOutput(L);
            else
                cout << "删除失败\n";


    return 0;
}

 

void ListInput(SqList &L)
{
    int i=0;
    cin>>i;
    for(int j=0; j<i; j++)
    {
        cin>>L.elem[j];
    }
    L.length=i;
}

void ListOutput(SqList L)
{
    for(int j=0; j<L.length; j++)
    {
        cout<<L.elem[j]<<" ";
    }
    cout<<endl;
}

int GetElem(SqList L, int i, ElemType &e)
{
    if(i<1||i>L.length)return 0;
    e=L.elem[i-1];
    return 1;
}

int LocateElem_Sq(SqList L, double e) 
{
    for(int j=0; j<L.length; j++)
    {
        if(L.elem[j]==e)
            return j+1;
    }
    return 0;
}

int ListInsert_Sq(SqList &L, int i, ElemType e)
{
    if(i<1||i>L.length)return 0;
    if(L.length==MAXSIZE)return 0;
    for(int j=L.length-1; j>=i-1; j--)
    {
        L.elem[j+1]=L.elem[j];
    }
    L.elem[i-1]=e;
    L.length++;
    return 1;
}

int ListDelete_Sq(SqList &L, int i)
{
    if(i<1||i>L.length)return 0;
    for(int j=i; j< L.length-1; j++)
    {
        L.elem[j-1]=L.elem[j];
    }
    L.length--;
    return 1;
}

 

标签:顺序,实现,Sq,elem,int,length,SqList
From: https://www.cnblogs.com/kk4458/p/16785713.html

相关文章

  • 视觉三维重建的关键技术及实现
    视觉三维重建=定位定姿 +稠密重建 +surfacereconstruction+纹理贴图。三维重建技术是计算机视觉的重要技术之一,基于视觉的三维重建技术通过深度数据获取、预处理、......
  • C语言实现广义表
    前言在学习广义表的时候,我先是翻阅了严蔚敏老师的《数据结构》第二版教材,然后翻阅了我们上课的教材,周桂红老师的《数据结构》第一版,两本书中,广义表都在"串、数组、广义表"......
  • 大dataframe删除小dataframe,然后调整dataframe顺序
    df=pd.merge(df,df1,how='left',indicator=True).query("_merge=='left_only'").drop('_merge',1)df=pd.merge(df,df2,how='left',indicator=True).query("_me......
  • [caffe解读] caffe从数学公式到代码实现3-shape相关类
    接着上一篇说,本篇开始读layers下面的一些与blobshape有关的layer,比如flatten_layer.cpp等,具体包括的在下面;flatten_layer.cppconv与deconv虽然也与shape有关,但是由于比较复......
  • [caffe解读] caffe从数学公式到代码实现1-导论
    新板块说明今天开一个新板块,目标是死磕现有的几大机器学习框架的代码,给想入门的小白们一些帮助。作为一个在图像行业战斗了几年的程序员,深知入门一个框架,和真的能用好一个框......
  • [caffe解读] caffe从数学公式到代码实现2-基础函数类
    接着上一篇,本篇就开始读layers下面的cpp,先看一下layers下面都有哪些cpp。absval_layer.cpp其中,下面这些layer是不需要反向传播的,大部分都是io类,我们就不讲了,自己去看。thres......
  • HTML5 组件Canvas实现图像灰度化
    作者| 贾志刚HTML5发布很长一段时间了,一直以来没有仔细的看过,学习后,发现HTML5中的Canvas组件功能是如此的强大,今天我们一起来看看HTML5Canvas是怎么做到的吧!1.新建一个h......
  • Redis持久化实现的简单过程
    Redis有3种实现持久化的方式:AOF日志、RDB快照、混合持久化Redis写入AOF日志的过程Redis执行完写操作命令后,将命令追加到server.aof_buf缓冲区通过write()系统调用,将a......
  • Redis实现搜索历史
    需求:实现搜索历史最大保存N条,保存N天一.RedisTemplate Stringkey=RedisKeyPrefix.识虫历史记录.getKey()+SecurityUtils.getLoginUser().getUser().getUserI......
  • C++ 实现视频文件播放(Windows Media Player、MFC、C#)
    <fontcolor=purplesize=5face="隶书">无为也,则用天下而有余;有为也,则为天下用而不足。1、简介https://docs.microsoft.com/en-us/windows/win32/wmp/about-the-windows-......