C语言顺序表操作 初始化/插入/判空/长度、元素位置/输出/删除/销毁

#include <stdio.h>
#include <malloc.h>
#define MaxSize 50

typedef char ElemType;
typedef struct
{
	ElemType data[MaxSize];
	int length;
} SqList;

//创建表
void InitList(SqList *&L)
{
	L = (SqList *)malloc(sizeof(SqList));
	L->length = 0; 
}

//销毁表
void DestroyList(SqList *L)
{
	free(L);
}

//判空
int ListEmpty(SqList *L)
{
	return(L->length==0);
}

//返回L中数据元素的个数
int ListLength(SqList *L)
{
	return(L->length);
}

//输出L表
void DispList(SqList *L)
{
	int i;
	if (ListEmpty(L)) return;
	for (i = 0; i < L->length; i++)
		printf("%c", L->data[i]); 
	printf("\n");
}

//用e返回L中第i个数据元素的值
int GetElem(SqList *L, int i, ElemType &e)
{
	if (i<1 || i>L->length)
		return 0;
	e = L->data[i];
	return e;
}

//返回L中第一个与e相同的元素在L中的位置,若不存在,则返回0
int LocateElem(SqList *L, ElemType e)
{
	int i = 0;
	while (i < L->length && L->data[i] != e) i++;
	if (i >= L->length)
		return 0;
	else
		return i + 1;
}

//在L中第i个位置前插入e,L长度+1
int ListInsert(SqList *L, int i, ElemType e)
{
	int j;
	if (i<1 || i>L->length + 1)
		return 0;
	i--;							//将顺序表位序转化为elem下标
	for (j = L->length; j > i; j--)		//将data[i]及后面元素后移一个位置
		L->data[j] = L->data[j - 1]; 
	L->data[i] = e; 
	L->length++;	 			//顺序表长度增1
	return 1;
}

//删除第i个数据元素,L长度-1
int ListDelete(SqList *L, int i, ElemType &e)
{
	int j;
	if (i<1 || i>L->length)
		return 0;
	i--;							//将顺序表位序转化为elem下标
	e = L->data[i];
	for (j = i; j < L->length - 1; j++)
		L->data[j] = L->data[j + 1]; 
	L->length--;
	return 1;
}


void main()
{
	SqList *L;
	ElemType e;

	//调用InitList()函数初始化顺序表
	printf("(1)初始化顺序表L\n");
	InitList(L);

	//调用ListInsert依次插入abcde元素
	printf("(2)依次插入a,b,c,d,e元素\n");
	int s = 1,i;
	char m = 'a';
	for (i=1;i<=5;i++)
	{
		ListInsert(L, s, m);
		s++;
		m++;
	}

	//输出L的长度
	printf("(3)L长度=%d\n", ListLength(L));

	//判断L是否为空
	if (ListEmpty(L))
	{
		printf("(4)顺序表L为空\n");
	}
	else
	{
		printf("(4)顺序表L为非空\n");
	}
	
	//输出L的第3个元素
	printf("(5)顺序表L的第三个元素=%c\n", GetElem(L,2,e));

	//输出元素b的位置
	char b='b';
	printf("(6)元素b的位置=%d\n", LocateElem(L,b));

	//在第4个元素位置上插入f元素
	printf("(7)在第4个元素位置上插入f元素\n");
	char f = 'f';
	ListInsert(L, 4, f);
	printf("输出顺序表L:"); DispList(L);

	//删除L的第3个元素
	printf("(8)删除L的第3个元素\n");
	ListDelete(L,3,e);
	//输出顺序表	L
	printf("(9)输出顺序表L:");
	DispList(L);

	//释放顺序表L
	printf("(10)释放顺序表L");
	DestroyList(L);
}

输出结果

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值