数据结构——线性表 C语言

#include <stdio.h>
#include <stdlib.h>
#define MaxSize 20
#define ElemType int


typedef struct
{
	ElemType data[MaxSize];                         //存放线性表中的元素 
	int length;                                     //存放线性表的长度 
}SqList;                                            //顺序表类型 

void CreateList(SqList * &L, ElemType a[], int n)   //由a中的n个元素建立顺序表 
{
	int i = 0, k = 0;                               //k表示L中的元素个数,初始值为0 
	L = (SqList * )malloc(sizeof(SqList));          //分配存放线性表的空间 
	while(i < n)
	{
		L -> data[k] = a[i];
		k++;
		i++;
	}
	L -> length = k;                                //设置L的长度 
}


void InitList(SqList * &L)                          //初始化线性表 
{
	L = (SqList * )malloc(sizeof(SqList));
	L -> length = 0;                                //置空线性表的长度为0 
}

void DestoryList(SqList * & L)                      //销毁线性表 
{
	free(L);                                        //释放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("%d ",L -> data[i]);
	printf("\n");
}

bool GetElem(SqList * L, int i, ElemType &e)        //求线性表中某个数据元素值  将第i个元素赋值给e 
{
	if(i < 1 || i > L -> length)
		return false;
	e = L -> data[i-1];
	return true;
}

int LocateElem(SqList * L, ElemType e)              //按元素值查找 
{
	int i = 0;
	while(i < L -> length && L -> data[i] != e)
		i++;
	if(i >= L -> length)
		return 0;                                   //未找到返回0 
	else
		return i + 1;                               //找到后返回其逻辑序号 
}

bool ListInsert(SqList * &L, int i, ElemType e)     //插入数据元素 
{
	int j;
	if(i < 1 || i > L -> length + 1)
		return false;
	i--;                                            //将顺序表逻辑序号转换成物理序号 
	for(j = L -> length; j > i; j--)                //将data[i]及后面的元素后移一个位置 
		L -> data[j] = L -> data[j-1];
	L -> data[i] = e;                               //插入元素e 
	L -> length ++;                                 //顺序表长度增加1 
	return true;
}

bool ListDelete(SqList * &L, int i, ElemType &e)    //删除数据元素 
{
	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 true;
}


int main()
{
	int n = 10;
	int a[10] = {1,2,3,4,5,6,7,8,9,10};
	int *p = a;
	InitList((SqList * &)p);                       //初始化线性表 
	CreateList((SqList * &)p,a,n);                 //创建线性表 
	DispList((SqList *)p);                         //输出线性表 
	
	bool listempty = ListEmpty((SqList *)p);       //判断是否是空表,0代表不是空表,1代表是空表 
	printf("%d\n",listempty);
	
	int listlength = ListLength((SqList *)p);      //返回线性表的长度 
	printf("%d\n",listlength);
	
	int elem;                                      //求线性表中某个元素值
	GetElem((SqList *)p,5,elem); 
	printf("%d\n",elem);
	
	int e = 6,locate;                              //按元素查找其逻辑序号 
	locate = LocateElem((SqList *)p,e);
	printf("%d\n",locate);
	
	ListInsert((SqList * &)p,5,20);                //插入数据元素 
	DispList((SqList *)p);
	
	int deleteelem;                                //删除线性表中的元素 
	ListDelete((SqList * &)p,5,deleteelem);
	printf("%d\n",deleteelem);
	
	DestoryList((SqList * &)p);                    //销毁线性表 
	return 0;
}




猜你喜欢

转载自blog.csdn.net/qq_41286145/article/details/82811983