顺序表的初始化(常见用法)

最近几天学习了线性表,现在就写篇博客总结下顺序表的常见用法,便于以后复习时用。

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <ctime>
using namespace std;
#define ok 1
#define false 0
#define maxSize 100
typedef int Status;         //Status 是变量类型,其值是函数结果状态,表示成功ok或者失败error
typedef int ElemType;       //ElemType 类型根据实际情况而定
typedef struct{
    ElemType data[maxSize];
    int length;                 //当前表的长度
}SeqList;
bool Insert(SeqList *L,int i,ElemType e )  //在L中第i个位置(data[i])插入新的元素e,L的长度加1
{
    int k;
    if(L->length==maxSize) return false;          //表满则退出
    if(i<0||i>L->length) return false;           //i的值不合理,返回错误信息
    if(i<=L->length)
    {
        for(k=L->length-1;k>=i;k--)         //将要插入元素位置后面的元素全部往后移一位
        L->data[k+1]=L->data[k];

    }
    L->data[i]=e;
    L->length++;                  //当前表的长度加1
}
//初始化顺序表
Status initList(SeqList *L)
{
    L->length=10;
    srand((unsigned)time(NULL));
    for(int i=0;i<10;i++)
        L->data[i]=rand()%100;
    return ok;
}
//遍历顺序表
void ListTraverse(SeqList L)
{
    int i;
    for(i=0;i<L.length;i++)
        cout<<L.data[i]<<" ";
    cout<<endl;
    return ;
}
//判断表是否为空
Status IsEmpty(SeqList L)
{
    if(L.length==0)
        return ok;
    else return false;
}
//将表置空
Status MakeEmpty(SeqList *L)
{
    L->length=0;
    return ok;
}
//定位元素位置
ElemType Locate(SeqList L,ElemType x)
{
    int k;
    for(k=0;k<L.length;k++)
        if(L.data[k]==x) return k;
    return false;
}
//查找某一位置的元素
ElemType Search(SeqList L,ElemType i)
{
    return L.data[i];
}
//删除某一位置的元素
bool Delete(SeqList *L,int i)   //删除第i位元素
{
    if(L->length==0) return false;
    if(i<0||i>=L->length) return false;
    if(i==L->length-1) {L->length--;return true;}
    else for(int k=i+1;k<L->length;k++)
        L->data[k-1]=L->data[k];
    L->length--;
    return true;

}
int main()
{
    int k;
    SeqList L;
    initList(&L);
    Status i;
    cout<<"初始化后L.length="<<L.length<<endl;
    cout<<"遍历顺序表中的元素:";
    ListTraverse(L);
    cout<<"1.将元素19970301插入第6位之前.";
    Insert(&L,6,19970301);
    cout<<"此时得到的顺序表为:";
    ListTraverse(L);
    cout<<"此时顺序表的长度为:"<<L.length<<endl<<endl;
    cout<<"2.将元素342623插入到第十位之前。";
    Insert(&L,10,342623);
    cout<<"此时得到的顺序表为:";
    ListTraverse(L);
    cout<<"此时顺序表的长度为:"<<L.length<<endl;

    cout<<"您要找第几号元素?  :";
    cin>>k;
    cout<<"您要找的元素为:"<<Search(L,k)<<endl;
    cout<<"您要查找的元素:";
    cin>>k;
    cout<<"您要找的元素的位置为:"<<Locate(L,k)<<endl;

    cout<<"您要删除第几号元素:";
    cin>>k;
    Delete(&L,k);
    cout<<"删除后的顺序表为:";
    ListTraverse(L);



    cout<<"清空表:\n";
    MakeEmpty(&L);
    return 0;
}

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值