数据结构——线性表 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;
}




 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodeJR

如果觉得有用请赏一个呗!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值