天天看點

順序表的初始化(常見用法)

最近幾天學習了線性表,現在就寫篇部落格總結下順序表的常見用法,便于以後複習時用。

#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;
}

           

繼續閱讀