/*************************************************************************************/
/* 顺序表基本操作函数
/*------------------------------------------------------------------------------------------------------------------------------
/*
/* Date: 2016年10月14日
/* Auther:vensontao
/************************************************************************************/
#include <stdio.h>
#include <malloc.h>
#define MaxSize 50
typedef char ElemType;
//--------------------------------------------------------
// 顺序表的类型定义
//--------------------------------------------------------
typedef struct
{
ElemType data[MaxSize]; // 存放顺序表元素
int length; // 存放顺序表的长度
} SqList;
//========================================================
// 建立顺序表
//========================================================
void CreateList(SqList *&L, ElemType a[], int n)
{
int i;
for (i=0;i<n;i++)
L->data[i]=a[i];
L->length=n;
}
//========================================================
// 初始化顺序表
//========================================================
void InitList(SqList *&L)
{
L=(SqList *)malloc(sizeof(SqList)); /*分配存放线性表的空间,并将地址初始化为0*/
L->length=0;
}
//========================================================
// 销毁顺序表
//========================================================
void DestroyList(SqList *&L)
{
free(L);
}
//========================================================
// 判断顺序表是否为空
//========================================================
int ListEmpty(SqList *L)
{
return (L->length==0);
}
//========================================================
// 求顺序表的长度
//========================================================
int ListLength(SqList *L)
{
return (L->length);
}
//========================================================
// 输出顺序表元素
//========================================================
void DispList(SqList *L)
{
int i;
if (ListEmpty(L))
return;
for (i=0;i<L->length;i++)
printf("%c ",L->data[i]);
printf("\n");
}
//========================================================
// 求顺序表中某个元素的值
//========================================================
int GetElem(SqList *L,int i,ElemType &e)
{
if (i<1 || i>L->length)
return 0;
e=L->data[i-1];
return 1;
}
//========================================================
// 求顺序表中某个元素的位置
//========================================================
int LocateElem(SqList *L, ElemType e)
{
int i=0;
while (i<L->length && L->data[i]!=e)
i++;
if (i>=L->length)
return 0;
else
return i+1;
}
//========================================================
// 向顺序表指定位置插入元素
//========================================================
int ListInsert(SqList *&L,int i,ElemType e)
{
int j;
if (i<1 || i>L->length+1)
return 0;
i--; /*将顺序表位序转化为elem下标*/
for (j=L->length;j>i;j--) /*将data[i]及后面元素后移一个位置*/
L->data[j]=L->data[j-1];
L->data[i]=e;
L->length++; /*顺序表长度增1*/
return 1;
}
//========================================================
// 删除顺序表中指定位置的元素
//========================================================
int ListDelete(SqList *&L,int i,ElemType &e)
{
int j;
if (i<1 || i>L->length)
return 0;
i--; /*将顺序表位序转化为elem下标*/
e=L->data[i];
for (j=i;j<L->length-1;j++) /*将data[i]之后的元素前移一个位置*/
L->data[j]=L->data[j+1];
L->length--; /*顺序表长度减1*/
return 1;
}