/*
* 一、数据结构基础之顺序表
* 顺序表数据结构(结构的定义+在此结构上的操作)
* --- 2012年4月21日 ---by lx
*/
#ifndef _SEQUENTIAL_LIST_H
#define _SEQUENTIAL_LIST_H
#include "Utility.h"
//宏定义顺序表的空间大小
#define LISTSIZE 20
//类型定义
typedef int DataType;
//声明顺序表类型结构体
typedef struct _SqList
{
DataType data[LISTSIZE];//存放数据元素的数组
int length;//记录顺序表的实际长度
} SqList;
//对顺序表的基本操作
void InitList(SqList* list);//初始化顺序表
int GetLength(SqList* list);//获得当前顺序表的长度
DataType GetElement(SqList* list, int index);//返回表中位于位置index处的元素值(index从0到Length-1)
void InsertElement(SqList* list, int index, DataType e);//在表中位置index处插入值为e的元素
void DeleteElement(SqList* list, int index);//删除表中位置index处的元素
void PrintList(SqList* list);//打印顺序表中的元素
//初始化顺序表
void InitList(SqList* list)
{
list->length=0;
}
//获得当前顺序表的长度
int GetLength(SqList* list)
{
return list->length;
}
//返回表中位于位置index处的元素值(index从0到Length-1)
DataType GetElement(SqList* list, int index)
{
if((index < 0) || (index > list->length-1))
Error("Array Index Out Of Bounds");
return list->data[index];
}
//在表中位置index处插入值为e的元素(index从0到Length为合法位置)
void InsertElement(SqList* list, int index, DataType e)
{
//检查插入位置是否合法
if((index < 0) || (index > list->length))
Error("Illegal Inserted Position");
//检查表空间是否已满
if(list->length >= LISTSIZE)
Error("Array Space Is Full");
//当在位置length处插入e时(即数组末尾下一位),无需移动任何元素
//当在位置index处插入时(index<length),从index~length-1的元素全部后移一位
for(int i=list->length-1; i>=index; i--)
{
list->data[i+1]=list->data[i];
}
//在位置index处插入元素e
list->data[index]=e;
//更新顺序表长度
list->length++;
}
//删除表中位置index处的元素(index从0到Length-1)
void DeleteElement(SqList* list, int index)
{
//检查删除位置是否合法
if((index < 0) || (index > list->length-1))
Error("Illegal deleted Position");
//当在位置length-1处删除e时(即数组末尾),无需移动任何元素
//当在位置index处删除时(index<length-1),从index+1~length-1的元素全部前移一位
for(int i=index; i<list->length-1; i++)
{
list->data[i]=list->data[i+1];
}
//更新表长度
list->length--;
}
//打印顺序表中的元素
void PrintList(SqList* list)
{
for(int i=0; i<list->length; i++)
{
printf("%d\t",list->data[i]);
}
printf("\n");
}
#endif