线性表的顺序存储结构——顺序表

把线性表中的所有元素按照其逻辑顺序依次存储到从计算机存储器中指定的一块连续的存储空间中。

建立顺序表 CreateList(将给定的含有n个元素的数组的每个元素依次放入顺序表中),主要动态分配空间的使用

顺序表基本运算主要包括

1.初始化线性表 InitList(L) (分配线性表的存储空间并将length置为0)

2.销毁线性表 DestroyList(L) (释放空间,直接free(L)即可!)

3.判断是否为空 ListEmpty(L) (返回布尔型结果)

4.求长度 ListLength(L) (返回length即可)

5.输出 DispList(L) (顺序显示各元素值)

6.求某个元素值 GetElem(L,i,e) (用e返回L中第i个元素值)

7.按元素值查找 LocateElem(L,e) (查找第一个与e相等的元素的逻辑序号,不存在返回0)

8.插入数据元素 ListInster(L,i,e) (在L的第i个位置上插入新的元素e)

9.删除数据元素 ListDelete(L,i,e) (删除第i个元素,e保存该值)

代码实现:

#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;
	//L=(SqList *)malloc(sizeof(SqList));//先进行过初始化则不需要 
	for(int i=0;i<n;i++)
	L->data[i]=a[i];
	L->length=n;
 } 
void InitList(SqList *&L)//初始化 
{
	L=(SqList *)malloc(sizeof(SqList));
	L->length=0;
}
void DestroyList(SqList *&L)//销毁 
{
	free(L);
}
bool ListEmpty(SqList *L)//判断是否为空 
{
	return(L->length==0);
} 
int ListLength(SqList *L)//求长度 
{
	return L->length; 
}
void DispList(SqList *L)//输出 
{
	for(int i=0;i<L->length;i++)
	{
		printf("%c",L->data[i]);
	}
	printf("\n"); 
}
bool GetElem(SqList *L,int i,ElemType &e)//求某个数据元素值,用e返回第i个元素的值 
{
	if(i<0||i>L->length)
	return false;
	e=L->data[i-1];
	return true;
}
int LocateElem(SqList *L,ElemType e)//按元素值查找,顺序查找第一个值与e相等的元素的逻辑序号,不存在则返回0 
{
	int i=0;
	while(i<L->length&&L->data[i]!=e)
	i++;
	if(i>L->length)
	return 0;
	else
	return i+1;
}
bool ListInsert(SqList *&L,int i,ElemType e)//在L的第i个位置上插入新的元素e 
{
	int j;
	if(i<1||i>L->length+1)
	return false;
	i--; //逻辑序号转换为物理序号!
	for(int j=L->length;j>i;j--)
	 L->data[j]=L->data[j-1];
	 L->data[i]=e;
	 L->length++;
	 return true;
}
bool ListDelete(SqList *&L,int i,ElemType &e)//删除L的第i个元素
{
	int j;
	if(i<1||i>L->length+1)
	return false;
	i--;
	e=L->data[i];
	for(int j=i;j<L->length;j++)
	L->data[j]=L->data[j+1];
	L->length--;
	return true;	
} 
int main()
{ 
	SqList *L;
	ElemType e='X';
	InitList(L);
	char a[5]={'Z','X','C','V','B'};
	CreateList(L,a,5);
	if(ListEmpty(L))
	printf("空!\n");
	else
	{ 
	printf("不空!\n");
	DispList(L);
	printf("当前长度为:%d\n",ListLength(L)); 
//	ListInsert(L,1,'B');
//	ListInsert(L,1,'A');
//	ListInsert(L,1,'B');
	ListDelete(L,1,e);//此处e保存的是被删除的元素 
	printf("被删除的为%c\n",e);
	printf("当前长度为:%d\n",ListLength(L)); 
	printf("输出:");
	DispList(L);
	} 
	return 0;
} 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黎曼猜想·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值