/************************************************
线性表的顺序存储结构-------顺序表
*************************************************/
/*
顺序表结构:
元素类型:ElemType
每个元素的的存储空间大小:sizeof(ElemType)
整个线性表的存储空间大小:n*sizeof(ElemType),n为线性表中元素个数
C和C++中,使用数组存放线性表中的元素和逻辑关系
数组大小:MaxSize
*/
#ifndef LINEARLIST_H
#define LINEARLIST_H
#define MaxSize 100
typedef int ElemType;
typedef struct
{
ElemType Data[MaxSize];
int length;
}SqList;
/*
根据数组a中的元素创建顺序表L,数据表长度为n
注意n的值不能超过定义顺序表里的MaxSize的大小
*/
void CreatList(SqList* &L,ElemType a[],int n);
/*
初始化一个空的顺序表L
*/
void InitList(SqList* &L);
/*
释放顺序表L
*/
void DestoryList(SqList* &L);
/*
判断顺序表L是否为空
*/
bool ListEmpty(SqList* &L);
/*
获取顺序表L长度
*/
int ListLength(SqList* &L);
/*
显示顺序表中所有元素内容
*/
void DisplayList(SqList* &L);
/*
获取顺序表L中第i个元素的内容(从0开始)
*/
ElemType GetElem(SqList* &L,int i);
/*
获取顺序表L中元素的内容内e的位置
*/
int LocateElem(SqList* &L,ElemType e);
/*
在顺序表L中i位置插入的内容e(i从0开始)
*/
bool ListInsert(SqList* &L,int i,ElemType e);
/*
删除顺序表L中i位置的内容(i从0开始)
*/
bool ListDelete(SqList* &L,int i);
#endif
#ifndef LINEARLIST_CPP
#define LINEARLIST_CPP
#include <iostream>
#include "LinearList.h"
using namespace std;
void CreatList(SqList* &L,ElemType a[],int n)
{
int i,k=0;
L = (SqList *)malloc(sizeof(SqList));
for(i=0;i<n;i++)
{
L->Data[i]=a[i];
k++;
}
L->length = k;
}
void InitList(SqList* &L)
{
L = (SqList *)malloc(sizeof(SqList));
L->length=0;
}
void DestoryList(SqList* &L)
{
free(L);
}
bool ListEmpty(SqList* &L)
{
return L->length ==0;
}
int ListLength(SqList* &L)
{
cout<<"ListLength:"<<L->length<<endl;
return L->length;
}
void DisplayList(SqList* &L)
{
for(int i=0;i<L->length;i++)
{
cout<<"L->Data[i]:"<<L->Data[i]<<endl;
}
}
ElemType GetElem(SqList* &L,int i)
{
if(i>=0&&i<=L->length-1)
{
cout<<"GetElem:"<<L->Data[i]<<endl;
return L->Data[i];
}
}
int LocateElem(SqList* &L,ElemType e)
{
int i = 0;
while(i<L->length&&e!=L->Data[i])
i++;
if(i>=L->length)
return 0;
else
cout<<"LocateElem:"<<i<<endl;
return i;
}
bool ListInsert(SqList* &L,int i,ElemType e)
{
if(i<0||i>L->length)
return false;
if(L->length == MaxSize)
return false;
for(int j=L->length;j>i;j--)
{
L->Data[j]=L->Data[j-1];
}
L->Data[i]=e;
L->length++;
return true;
}
bool ListDelete(SqList* &L,int i)
{
if(i<0||i>L->length)
return false;
for(int j=i;j<L->length;j++)
{
L->Data[j]=L->Data[j+1];
}
L->length--;
return true;
}
int main()
{
int a[10] = {11,22,33,44,55,66,77,88,99,101};
SqList* L;
CreatList(L,a,10);
DisplayList(L);
int length = ListLength(L);
GetElem(L,0);
LocateElem(L,55);
bool ret = ListInsert(L,0,1000);
DisplayList(L);
bool ret2 = ListDelete(L,1);
DisplayList(L);
DestoryList(L);
return 0;
}
#endif