最近幾天學習了線性表,現在就寫篇部落格總結下順序表的常見用法,便于以後複習時用。
#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;
}