天天看點

程式設計菜鳥的日記-初學嘗試程式設計-順序表的基本操作

#include <iostream>

using namespace std;

typedef int ElemType;

#define Maxsize 100

//順序表的兩個要素:data和length

typedef struct

{

 ElemType data[Maxsize];

 int length;

}SqList;

//1.建立線性表

void CreateList(SqList *&L,ElemType a[], int n)//注意引用的使用

{

 if(n>Maxsize)

  throw"上溢";

 else

 {

  for(int i=0;i<=n-1;i++)

  {

   cin>>a[i];

   L->data[i]=a[i];

  }

  L->length=n;

 }

}

//2.初始化線性表

void InitList(SqList *&L)

{

 L=(SqList *)malloc(sizeof(SqList));//配置設定存放線性表的空間

 L->length=0;

}

//3.銷毀線性表

void Destory(SqList *&L)

{

 free(L);

}

//4.判斷表是否為空,空傳回1,否則傳回0

int ListEmpty(SqList *&L)

{

 return(L->length==0);

}

//5.判斷表是否滿

int ListFull(SqList *&L)

{

 if(L->length==Maxsize)

  return 1;

 else

  return 0;

}

//6.将e插入表中位置i

void Insert(SqList *&L,int i,ElemType e)

{

 if(L->length>=Maxsize)

  throw"上溢";

 if(i<1||i>L->length+1)

  throw"插入位置非法";

 else

 {

  for(int j=L->length-1;j>=i-1;j--)

  {

   L->data[j+1]=L->data[j];

  }

  L->data[i-1]=e;

  L->length++;

 }

}

//7.删除表中位置i的元素

ElemType Delete(SqList *L,int i)

{

 if(L->length==0)

  throw"下溢";

 if(i<1||i>L->length)

  throw"删除位置非法";

 else

 {

  ElemType x=L->data[i-1];

  for(int j=i-1;j<=L->length-1;j++)

  {

   L->data[j]=L->data[j+1];

  }

  L->length--;

  return x;

 }

}

//8.擷取位置i的元素

ElemType GetElem(SqList *&L,int i)

{

 if(i<1||i>L->length)

  throw"擷取元素位置異常";

 else

 {

  ElemType x=L->data[i-1];

  return x;

 }

}

//9.查找第一個與e相等的元素位置

int LocateElem(SqList *&L,ElemType e)

{

 for(int i=0;i<=L->length-1;i++)

 {

  if(L->data[i]==e)

   return i+1;

 }

 return 0;

}

//10.求表長

int ListLength(SqList *&L)

{

 return L->length;

}

//11.輸出表全部元素

void DispList(SqList *&L)

{

 if(L->length)

 {

  for(int i=0;i<=L->length-1;i++)

   cout<<i+1<<":"<<L->data[i]<<endl;

 }

}

void main()

{

 SqList *L;

 //L=(SqList *)malloc(sizeof(SqList));

    InitList(L);//初始化

 ElemType a[100];

 ElemType e;

 int n,i;

 cin>>n;

 CreateList(L,a,n);

    ListEmpty(L);

 ListFull(L);

 cout<<"請輸入插入位置:";

 cin>>i;

 cout<<endl;

 cout<<"請輸入要插入位置"<<i<<"的元素值:";

 cin>>e;

    Insert(L,i,e);

    DispList(L);

 Delete(L,i);

    DispList(L);

    e=GetElem(L,i);

    i=LocateElem(L,e);

 cout<<i<<endl;

 ListLength(L);

    DispList(L);

 Destory(L);

 system("pause");

}