数据结构 顺序表各种基本运算的实现

数据结构 顺序表各种基本运算的实现

#include<stdio.h>
#include<stdlib.h>
#define MaxSize 10
typedef struct
{
	char data[MaxSize];
	int length;
}SqList; 

void InitList(SqList * &L)                  //初始化线性表
{
	L = (SqList*)malloc(sizeof(SqList));    //分配存放线性表的空间
	L->length = 0;                          //置空线性表长度为0
}
bool ListInsert(SqList *&L, int i, char e)   //插入数据元素
{
	int j;
	if (i<1 || i>L->length + 1)
		return false;                 //参数错误是返回false
	i--;                              //将顺序表逻辑序号转换为物理序号
	for (j = L->length; j>i; j--)     //将data[i]及后面元素后移一个位置
		L->data[j] = L->data[j - 1];
	L->data[i] = e;                   //插入元素e
	L->length++;                      //顺序表长度+1
	return true;                      //成功插入返回true
}
void DispList(SqList *L)             //输出线性表L
{
	int i;
	for (i = 0; i<L->length; i++)    //扫描顺序表输出各元素值
		printf("%3c", L->data[i]);
	printf("\n\n");
}
int ListLength(SqList *L)     //求线性表L的长度
{
	return (L->length);
}
bool ListEmpty(SqList*L)      //判断线性表是否为空表
{
	return(L->length == 0);   //若L为空,则返回true,否则返回false
}
bool GetElem(SqList *L, int i, char &e)  //求顺序表L中某个数据元素值
{
	if (i<1 || i>L->length)   
		return false;         //参数错误时返回false
	e = L->data[i - 1];       //取元素值
	return true;              //成功找到元素时返回true
}
int LocateElem(SqList *L, char e)     //按元素值查找
{
	int i = 0;
	while (i<L->length&&L->data[i] != e)
		i++;                 //查找元素e
	if (i >= L->length)      
		return 0;            //未找到时返回0
	else              
		return i + 1;        //找到时返回其逻辑序号
}
bool ListDelete(SqList *&L, int i, char &e)   //删除数据元素
{ 
	int j;
	if (i<1 || i>L->length)
		return false;                   //参数错误时返回false
 	i--;                                //将顺序表逻辑序号转化为物理序号  
 	e = L->data[i]; 
	for (j = i; j<L->length - 1; j++)
		L->data[j] = L->data[j + 1];    //将data[i]之后的元素迁移一个位置
	L->length--;                        //顺序表的长度-1
	return true;                        //成功删除返回true
}
void DestroyList(SqList * &L)    //销毁线性表
{
	free(L);     
}                 //释放线性表L所占空间

int main()
{
	SqList *L;
	char e;
	int i;
	InitList(L);
	printf("\n创建一个空的线性表\n使用尾插法插入a,b,c,d,e  \n");
	printf("  输出顺序表L: \n");
	ListInsert(L, 1, 'a');
	ListInsert(L, 2, 'b');
	ListInsert(L, 3, 'c');
	ListInsert(L, 4, 'd');
	ListInsert(L, 5, 'e');
	DispList(L);
	ListLength(L);
	printf("顺序表的长度为:%d\n\n", L->length);
	if (ListEmpty(L) == 1)
		printf("顺序表为空!\n\n");
	else
		printf("顺序表不为空!\n\n");
	GetElem(L, 3, e);
	printf("顺序表的第三个元素为:%3c\n\n", e);
	i = LocateElem(L, 'a');
	printf("顺序表中a的位置是:%3d\n\n", i);
	ListInsert(L, 4, 'f');
	printf("在第四个元素位置上插入元素'f' \n");
	printf("  插入后顺序表L为:\n");
	DispList(L);
	printf("删除L中第三个元素\n");
	ListDelete(L, 3, e);
	printf("  删除后顺序表L为:\n");
	DispList(L);
	printf("顺序表L已释放\n");
	DestroyList(L);
	printf("\n");
	return 0;
}
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值