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

/*
 * 一、数据结构基础之顺序表		
 * 顺序表数据结构(结构的定义+在此结构上的操作)
 * --- 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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值