数据结构学习笔记||顺序表

顺序表基本运算算法

#include<stdio.h>
#include<malloc.h>
#define Maxsize 50
typedef int ElemType;
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)                                   //i扫描数组a的元素
	{
		L->data[k]=a[i];                        //将元素a[i]存放到L中
		k++;i++; 
	}
	L->length=k;                               //设置L的长度k 
}

//初始化线性表:构造一个空的线性表L,只需分配线性表的存储空间并将length设置为0即可
void InitList(SqList *&L)
{
	L=(SqList *)malloc(sizeof(SqList));        //分配存放线性表的空间
	L->length=0;                               //置空线性表的长度为0 
}

//销毁线性表:释放线性表L占用的内存空间(每次用完记得销毁)
void DestroyList(SqList *&L)
{
	free(L);                                  //释放L所指的顺序表空间 
} 

//判断线性表是否为空表:返回布尔值表示L是否为空表
bool ListEmpty(SqList *L)
{
	return(L->length==0);
}

//求线性表的长度:返回顺序表L的长度,只需返回length域的值即可 
int ListLength(SqList *L)
{
	return(L->length);
}

//输出线性表:依次显示L中各元素的值
void DispList(SqList *L)
{
	for(int i=0;i<L->length;i++)             //扫描顺序表输出各元素值
	   printf("%d",L->data[i]);
	printf("\n"); 
}

//求线性表中的某个数据元素值:用引用型参数e返回L中第i个(1≤i≤n)个元素的值
bool GetElem(SqList *L,int i,ElemType &e)
{
	if(i<1||i>L->length)
	  return false;                        //参数i错误时返回false
	e=L->data[i-1];                        //取元素值
	return true;                           //成功找到元素时返回true 
}

//按元素值查找:顺序查找第一个值域与e相等的元素的逻辑序号(找到后返回一个大于0的值,否则返回0)
int LocateElem(SqList *L,ElemType e)
{
	int i=0;
	while(i<L->length&&L->data[i]!=e)
	   i++;                                //查找元素e
	if(i>=L->length)                       //未找到时返回0
	  return 0;
	else
	  return i+1;                          //找到后返回其逻辑序号 
}

//插入数据元素:在顺序表L的第i(1≤i≤n+1)个位置上插入新元素e。
//顺序表原来第i个元素及以后的元素均后移一个位置,并从最后一个元素an开始移动
//腾出一个空位插入新元素,最后顺序表的长度增1并返回true,i值不正确则返回false 
bool ListInsert(SqList *&L,int i,ElemType e)
{
	int j;
	if(i<1||i>L->length+1||L->length==Maxsize)
	  return false;                        //参数i错误时返回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;                           //成功插入返回true 
}

//删除数据元素:删除顺序表L的第i(1≤i≤n+1)个元素 
//i值不正确,返回false;否则将线性表第i个元素以后的元素均向前移动一个位置,并从元素an+1开始移动起
//覆盖了原来第i个元素,达到了删除该元素的目的,最后顺序表的长度减1并返回true
bool ListDelete(SqList *&L,int i,ElemType &e)
{
	int j;
	if(i<1||i>L->length)                   //参数i错误时返回false
	  return false;
    i--;                                 //将顺序表逻辑序号转化为物理序号
	e=L->data[i];
	for(j=i;j<L->length-1;j++)           //将data[i]之后的元素前移一个位置
	   L->data[j]=L->data[j+1];          
	L->length--;                        //顺序表的长度减1
	return true;                        //成功删除返回true                
} 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值