C++实现顺序表

最近打算复习巩固一下数据结构,用c++实现了顺序表的一些基本功能,可能有bug,有问题的话,希望大佬留下评论指证。

#include <iostream>
#include <cstdlib>
#include <malloc.h>

using namespace std;

//5个常量定义
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -1

//类型定义
typedef int ElmeType;
typedef int status;


// 定义顺序栈
typedef struct
{
    ElmeType *elme;
    int length;
    int size;
    int increment;

} SqlLsit;


//初始化顺序表
status InitSqlList(SqlLsit &L, int size, int inc)
{
    L.elme = (ElmeType *) malloc(size * sizeof(ElmeType));
    if(L.elme == NULL)
        return OVERFLOW;
    L.length = 0;
    L.size = size;
    L.increment = inc;
    return OK;
}
//删除顺序表
status DeleteSqlList(SqlLsit &L)
{
    free(L.elme);
    L.elme = NULL;
    L.length = 0;
    return OK;
}
//清空顺序表
void ClearSqlList(SqlLsit &L)
{
    if(L.length != 0)
        L.length = 0;

}
//检测顺序表是否为空
void isEmpty(SqlLsit &L)
{
    if(L.length != 0)
        cout << "顺序表不为空!\n";
    else
        cout << "顺序表为空!\n";
}
//返回顺序表元素的个数
status ListLength(SqlLsit &L)
{
    return L.length;
}
//返回顺序表中第i个元素的值
status GetElme(SqlLsit &L, int i, ElmeType &e)
{
    if(i < 0 || i > L.length)
        return -1;
    else
    {
        e = L.elme[i - 1];
        return OK;
    }
}
//在顺序表中查找元素e,返回它出现的第一个位置,不存在返回-1
status SearchSqlList(SqlLsit &L, ElmeType e)
{
    int i = 0;
    while(i <= L.length - 1 && L.elme[i] != e)
        i++;
    if(i <= L.length - 1)
        return i + 1;
    else
        return -1;
}
//在顺序表第i个位置插入元素e
status InsertSqlList(SqlLsit &L, int i, ElmeType e)
{
    int j;
    if(i <= 0 && i > L.length)
        return -1;
    for(j = L.length - 1; j >= i - 1; j--)
    {
        L.elme[j + 1] = L.elme[j];
    }
    L.elme[i - 1] = e;
    L.length++;
    return OK;
}
//删除顺序表第i个位置的元素
status DeleteElme(SqlLsit &L, int i)
{
    int j;
    if(i <= 0 || i > L.length)
        return -1;
    for(j = i - 1; j < L.length; j++)
    {
        L.elme[j] = L.elme[j + 1];
    }
    L.length--;
    return OK;
}
//顺序表的打印
void SqlLsitPrint(SqlLsit &L)
{
    if(L.length == 0)
    {
        cout << "顺序表为空!\n";
    }
    else
        for(int i = 0; i < L.length; i++)
            cout << L.elme[i] << "\t";
    cout << endl;
}
int main()
{
    SqlLsit L;
    int i, j;
    int e;
    InitSqlList(L, 50, 10);
    for (i = 0; i < 6; i++)
        L.elme[i] = i;
    L.length = 6;
    while(true)
    {

        //DeleteSqlList(L);
        SqlLsitPrint(L);
        //ClearSqlList(L);
        isEmpty(L);
        cout << "顺序表大小为:" << ListLength(L) << endl;
        cout << "请输入你想查找第几个元素:";
        cin >> i;
        j = GetElme(L, i, e);
        //cout<<j<<endl;
        if(j != -1)
            cout << "顺序表第" << i << "个元素的值为:" << e << endl;
        else
            cout << "请输入正确的索引!\n";
        cout << "请输入要查找元素的值:";
        cin >> i;
        j = SearchSqlList(L, i);
        if(j != -1)
            cout << i << "在顺序表中第" << j << "个位置\n";
        else
            cout << "该顺序表中没有您要查找的值\n";
        cout << "请输入要插入的位置和元素的值:";
        cin >> i >> j;
        j = InsertSqlList(L, i, j);
        if(j != -1)
            SqlLsitPrint(L);
        else
            cout << "请输入正确的插入位置!\n";
        cout << "请输入要删除的位置:";
        cin >> i;
        j = DeleteElme(L, i);
        if(j != -1)
            SqlLsitPrint(L);
        else
            cout << "请输入正确的删除索引!\n";
    }
    return 0;
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
用模板方式实现顺序表的合并 #include "stdafx.h" #include #define MaxSize 100 template class SeqList { private: T * Mylist; int ListMaxSize; int Length; public: SeqList(int ListMaxSize=MaxSize); //构造函数 ~SeqList(void);// 析构函数 bool SLIsEmpty(void); // 判断表是否为空 bool SLIsFull(void);//判断表是否满 int ListLength(void){return Length;}//求表长度 T SLGetElem(int i); // 取得第i个元素的值 int SLFind(T & x,int index); //查找值为x的结点 bool SLInsert(int i,T & x); // 在表的第i个位置插入新结点 bool SLDelete(int i); // 删除表的第i个位置的结点 void CreateList(int num);// 创建一个包含num个元素的顺序表 void SLPrint(); //输出全体元素 }; template SeqList ::SeqList(int listMaxSize) //初始化顺序表 { if(listMaxSize>0){ ListMaxSize=listMaxSize; Length=0; Mylist=new T [ListMaxSize]; // 创建连续的表空间 } } template SeqList ::~SeqList(void) { delete [] Mylist;//删除表,释放表空间 } template void SeqList ::CreateList(int num) { T x; Length=0; cout << "请输入"<<num<<"个整数数据元素以创建一个线性表"<<endl; for (int i=0;i>x; Mylist[i]=x; Length++; } } template bool SeqList ::SLIsEmpty(void) // 判断表是否为空 { return (Length<=0)?true:false; //表空则返回真(true),否则返回假(false) } template bool SeqList ::SLIsFull(void)//判断表是否满 { return(Length>=ListMaxSize)?true:false; //表满则返回真(true),否则返回假(false) } template T SeqList ::SLGetElem(int i) // 取得第i个元素的值 { return(iLength-1)?-1:Mylist[i]; } template int SeqList ::SLFind(T & x,int index) //查找值为x的结点 { for(int i=0;i<index;i++) if(Mylist[i]==x) return i+1; return -1;//没有找到给定元素 } template bool SeqList ::SLInsert(int i,T & x) // 在表的第i个位置插入新结点 { if(iLength) {cout <<"参数i不合理!" <<endl; return false;} else if(Length==ListMaxSize) {cout<< "表已满,无法插入!"<i;j--) Mylist[j]=Mylist[j-1]; Mylist[j]=x; Length++; return true; } } template <clas
使用c++实现顺序表:多文件编程,层次清晰,函数有注释 SeqList();//构造函数,存储的元素个数设为0 bool setLength(size_t length);//设置已经存储的元素个数 bool addElement(ElemType element);//把某个元素添加到顺序表末尾 bool addElement(ElemType element , size_t n);//插入一个元素,使其成为第n个元素,其余元素后移 bool delElement();//删除所有的元素 bool delElement(size_t n);//删除第n个元素 bool delElement(string elementDetailType,string elementDetail);//通过某个元素细节找到元素,把这个元素删除 bool replaceElement(ElemType element , size_t n);//使用一个元素,替换掉第n个元素 bool swapElement(size_t n1 , size_t n2);//把第n1个元素和第n2个元素交换 ElemType* getElement();//得到数组头的指针 ElemType* getElement(size_t n);//得到第n个元素的指针 size_t getLength();//得到存储的元素个数 size_t getMaxSize();//得到顺序表容量 bool showElementDetail();//输出所有的元素细节 bool showElementDetail(size_t n);//输出第n个元素的细节 bool showElementDetail(string elementDetailType,string elementDetail);//通过某个元素细节找到元素,输出元素所有细节 size_t findElement(string elementDetailType,string elementDetail);//通过某个元素细节找到元素位置 static int inputAInt(int min = 0,int max = 9,int defaultValue = -1);//从键盘读取,限制为一个min到max间的整数,非法情况返回defaultValue void startControlLoop();//打开控制界面 ~SeqList();//析构函数

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值