数据结构用数组当作线性表

#include <stdio.h>

#define error printf

struct List;
typedef int ElementType;
typedef struct List *List;


struct List
{
	ElementType array[100];
	int num;
};

/*list BuildList()
{
	list list;
	list->array = malloc(sizeof(ElementType));
	list->num = 0;
}*/

void initialize(List list)
{
	list->num = 0;
}

ElementType FoundI(List list,int i)   //查找序号为i的元素
{                                        //注意:数组的序号从0开始
	return list->array[i];
}

int FoundValue(List list, ElementType x)   //查找第一个值为x的元素
{
	int i;
	for (i = 0; i < list->num; i++)
		if (list->array[i] == x)
			break;
	if (i == list->num)
	{
		error("the value is not exit!");
		return 0;
	}
	return i;
	
}

void InsertFirst(List list, ElementType value)    //插入新元素作为第一个元素
{
	int i;
	for (i = list->num; i >= 0; i--)
		list->array[i + 1] = list->array[i];
	list->array[0] = value;
	list->num++;
}

void InsertLast(List list, ElementType value)
{
	list->array[list->num++] = value;    //注意:数组下标从0开始,故在插入之前
	                                     //数组内序号为list->num是没有元素的
}

void InsertI(List list, ElementType value,int i)    //将元素插入到第i个位置
{                                                //注意:数组是从下标为0开始的,故插入的元素应插入到下标为i-1的位置
	int k;
	for (k = list->num; k >= i; k--)
		list->array[k + 1] = list->array[k];
	list->array[k] = value;
	list->num++;
}

void DeleteFirst(List list)        //删除第一个元素
{
	int i;
	for (i = 0; i < list->num - 1; i++)
		list->array[i] = list->array[i + 1];
}

void DeleteLast(List list)      //删除最后一个元素
{
	list->num--;
}

void DeleteI(List list, int i)      //删除第i个元素
{
	for (; i < list->num; i++)                       //注意:数组的下标从零开始
		list->array[i - 1] = list->array[i];
	list->num--;
}

int main()
{
	struct List list;
	initialize(&list);
	initialize(&list);
	InsertFirst(&list, 3);
	InsertFirst(&list, 9);
	InsertFirst(&list, 21);
	InsertLast(&list, 18);
	InsertI(&list, 22, 2);
	DeleteLast(&list);
	DeleteI(&list, 2);
	printf("%d\n", list.num);
	printf("%d\n", FoundValue(&list, 18));
	printf("%d\n", list.array[3]);
	printf("%d\n", FoundI(&list, 0));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值