顺序表的声明与应用

      编写一个程序,实现顺序表的各种基本运算和整体建表算法(假设顺序表的元素类型ElemType为char),并在此基础上设计一个程序完成以下功能。

(1)初始化顺序表L。

(2)依次插入a、b、c、d、e元素。

(3)输出顺序表L。

(4)输出顺序表L的长度。

(5)判断顺序表L是否为空。

(6)输出顺序表L的第3个元素。

(7)输出元素a的位置。

(8)在第4个元素位置上插人f元素。

(9)输出顺序表L。

(10)删除顺序表L的第3个元素。

(11)输出顺序表L。

(12)释放顺序表L。

#include<stdio.h>
#include <stdlib.h>


typedef char Elemtype;
typedef struct {
	Elemtype data[50];
	int length;
}sqlist, * List;


int IntList(sqlist*& L)  //初始化线性表
{
	L = (sqlist*)malloc(sizeof(sqlist));
	if (!L)
		exit(0);
	L->length = 0;
	return 1;
}

int ListEmpty(sqlist* L)   //判断是否为空表
{
	return (L->length == 0);
}

int ListLength(sqlist* L)     //顺序表长度
{
	return(L->length);
}

int ListInsert(sqlist* L, int i, Elemtype e)  //插入元素
{
	int n;
	if (i<1 || i>L->length + 1 || L->length == 50)
		return false;
	i--;
	for (n = L->length; n > i; n--)
		L->data[n] = L->data[n - 1];
	L->data[i] = e;
	L->length++;
	return 1;
}

int ListDelete(sqlist* L, int i, Elemtype& e)    //删除第i个元素
{
	int j;
	if (i<1 || i>L->length)
		return  false;
	i--;
	e = L->data[i];
	for (j = i; j < L->length - 1; j++)
	{
		L->data[j] = L->data[j + 1];
	}
	L->length--;
	return 1;
}

int GetElem(sqlist* L, int i, Elemtype& e)    //按序号求元素
{
	if (i<1 || i>L->length)
		return 0;
	e = L->data[i - 1];
	return 1;
}

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);
}

void Print(sqlist* L)   //打印顺序表
{
	int i;
	for (i = 0; i < L->length; i++)
	{
		printf("%c", L->data[i]);
		printf(" ");
	}
	printf("\n");
}

void DestroyList(sqlist* L)
{
	free(L);
}


int main()
{
	Elemtype m, n;
	sqlist* L;
	printf("(1)初始化顺序表L\n");
	IntList(L);

	printf("(2)依次插入元素a,b,c,d,e\n");
	ListInsert(L, 1, 'a');
	ListInsert(L, 2, 'b');
	ListInsert(L, 3, 'c');
	ListInsert(L, 4, 'd');
	ListInsert(L, 5, 'e');

	printf("(3)输出顺序表:");
	Print(L);

	printf("(4)输出顺序表长度:%d\n", ListLength(L));

	printf("(5)判断顺序表是否为空:%s\n", (ListEmpty(L) ? "空" : "非空"));

	GetElem(L, 3, m);
	printf("(6)输出顺序表L的第3个元素:%c\n", m);

	printf("(7)输出元素a的位置:%d\n", (LocateElem(L, 'a')));

	ListInsert(L, 4, 'f');
	printf("(8)在第4个位置插入元素f\n");

	printf("(9)输出顺序表:");
	Print(L);

	ListDelete(L, 3, n);
	printf("(10)删除顺序表L第3个元素\n");

	printf("(11)输出顺序表L:");
	Print(L);

	printf("(12)释放顺序表L\n");
	DestroyList(L);

	return 0;
}

运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值