您的位置:首页 > 理论基础 > 数据结构算法

一、数据结构基础之顺序表C语言实现

2012-05-05 20:53 906 查看
/*
* 一、数据结构基础之顺序表
* 顺序表数据结构(结构的定义+在此结构上的操作)
* --- 2012年4月21日 ---by lee
*/

#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

//测试代码
/*
SqList* list=(SqList*)malloc(sizeof(SqList));
InitList(list);
InsertElement(list,0,1);
InsertElement(list,1,2);
InsertElement(list,2,3);
InsertElement(list,3,4);
InsertElement(list,4,5);
InsertElement(list,5,6);
PrintList(list);
DeleteElement(list,3);
PrintList(list);
printf("%d\n",GetElement(list,1));
DeleteElement(list,6);
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: