数据结构 顺序表 C语言实现代码

运行环境VC6.0

#include "stdio.h"
#include "string.h"

#define MAXSIZE 50//一个线性表的最大长度

typedef int ElemType;//元素类型为整形

typedef struct//线性表结构体,包含一个大数组和长度变量
{
	ElemType data[MAXSIZE];
	int length;//线性表当前长度
}SqList;

void Initlist(SqList *L)//初始化线性表长度为0 *
{
	L->length = 0;//长度变量置0
}

bool ListEmpty(SqList L)//判空,空返回true *
{
	if(L.length == 0)//长度为零返回true
		return true;
	return false;//否则返回false
}

void ClearList(SqList *L)//清空线性表,待检测
{
	memset(L->data,0,L->length);//将线性表已用元素清零
	L->length = 0;//长度置0
}

ElemType GetElem(SqList L,int i)//返回线性表L中第i个元素 *
{
	if(i<1 || i>L.length)//输入位置非法(位置应该在[1,L.length]区间)
		return 0;

	return L.data[i-1];//合法返回该位置元素
}

int LocateElem(SqList L,ElemType e)//在线性表L中查找元素e,失败返回0 *
{
	int a = 0;

	while(a < L.length)//在已用元素内循环判断
	{
		if(e == L.data[a])//找到相同元素
			return a+1;//返回元素位置
		a++;
	}
	return 0;
}

void ListInsert(SqList *L,int i,ElemType e)//在线性表L中第i个位置插入元素e *
{
	int a;
	
	if(L->length == MAXSIZE) return;//线性表满了,退出
	if(i<1 || i>L->length+1) return;//插入位置不合理,退出

	for(a=L->length-1;a>=i-1;a--)//在插入位置之后的元素都要后移,先后移最后一个元素,然后倒数第二个,以此类推
	{
		L->data[a+1] = L->data[a];
	}
	L->data[i-1] = e;//将e赋值给插入位置的元素
	L->length++;//长度+1
}

ElemType ListDelete(SqList *L,int i)//删除线性表L中第i个元素并返回其值 *
{
	int a;
	ElemType e;

	if(L->length == 0) return 0;//如果为空表,退出
	if(i<1 || i>L->length) return 0;//删除位置不合理,退出
	e = L->data[i-1];//暂时保存要删除的元素的值
	for(a=i-1;a<L->length;a++)//在删除位置之后的元素都要前移,先前移i之后的第一个元素,然后第二个,直到最后一个
	{
		L->data[a] = L->data[a+1];
	}
	L->length--;//长度-1
	return e;//返回删除的元素的值
}

int ListLength(SqList L)//返回线性表长度 *
{
	return L.length;
}

void PrintList(SqList L)//打印输出线性表 *
{
	int a;
	for(a=0;a<L.length;a++)
	{
		printf("%d ",L.data[a]);
	}
	printf("\n");
}

int main()
{
	int i;
	ElemType e;
	SqList L1;//定义一个线性表L1

	Initlist(&L1);//初始化线性表

	if(ListEmpty(L1)) printf("线性表为空\n");
	else printf("线性表非空\n");

	for(i=0;i<10;i++)
	{
		ListInsert(&L1,i+1,(i+1));
	}
	PrintList(L1);

	if(ListEmpty(L1)) printf("线性表为空\n");
	else printf("线性表非空\n");

	ListInsert(&L1,5,64);
	PrintList(L1);

	e = ListDelete(&L1,3);
	printf("删除第3个元素%d\n",e);
	PrintList(L1);

	e = ListDelete(&L1,ListLength(L1));
	printf("删除最后一个元素%d\n",e);
	PrintList(L1);

	printf("第8个元素是%d\n",GetElem(L1,8));
	printf("第4个元素是%d\n",GetElem(L1,4));
	printf("第1个元素是%d\n",GetElem(L1,1));
	printf("第10个元素是%d\n",GetElem(L1,10));//***

	printf("查找元素64在第%d\n",LocateElem(L1,64));

	printf("删除元素64\n");
	ListDelete(&L1,LocateElem(L1,64));
	PrintList(L1);

	printf("在最后插入元素128\n");
	ListInsert(&L1,ListLength(L1)+1,128);
	PrintList(L1);

	printf("清空\n");
	ClearList(&L1);
	if(ListEmpty(L1)) printf("线性表为空\n");
	else printf("线性表非空\n");

	PrintList(L1);

	return 0;
}

你可能感兴趣的:(C语言,数据结构,数据结构,算法)