线性表的顺序结构


```cpp
运行环境:devcpp
编写语言:C++
线性表的顺序结构算法操作

#include<iostream>
using namespace std;
#define MaxSize 20

typedef struct{
	int data[MaxSize];
	int length;
}Sqlist; //线性表的逻辑元素是从1开始 

/*
	*	指针(有单独的存储空间)存储的是地址 ,初始可以为:NULL 
	*	引用(引用变量本身没有自己的实际存储空间,跟引用的对象共享同一块存储地址,初始不可以为:NULL ) 
	SqList *L和  SqList *&L的区别:
		(1)*&L:是指针类型的引用 ,代表原指针 
		(2)在函数中修改指针本身所指向的地址,*L:实参不改变,而  *&L:会改变实参(对原指针的操作) 
 
*/ 
int main(){
	//函数声明 
	void CreateList(Sqlist *&L,int a[],int n); //创建线性表 
	void GetList(Sqlist *&L);//初始化线性表 
	void InitList(Sqlist *&L);//初始化线性表 
	void DestoryList(Sqlist *&L);//销毁线性表
	bool ListEmpty(Sqlist *L);//判断线性表是否空
	int ListLength(Sqlist *L);//线性表的长度
	int GetElem(Sqlist *L,int i);//求线性表中某个数据元素
	bool ListInsert(Sqlist *&L,int i,int e);//在线性表的第i个位置插入一个值
	bool ListDelete(Sqlist *&L,int i,int &e);//删除线性表第i个位置的值	
	Sqlist *L;//指向Sqlist的指针变量,指向:Null 
	// Sqlist L; 创建的是一个对象 ,系统会自动创建存储空间   若使用指针应:Sqlist *L = new Sqlist();
	int e; 
	int a[] = {1,2,3,4,5};
	CreateList(L,a,5);
	e = GetElem(L,2);
	GetList(L);
	cout<<'\n'<<"下标为2的元素"<<e<<" "<<endl;
	ListInsert(L,5,6);
	cout<<"在第5个位置插入一个数字:6,后线性表为:"<<endl;
	GetList(L);
	cout<<'\n'<<"在第2个位置删除一个数字,后线性表为:"<<endl;
	ListDelete(L,2,e);
	GetList(L);
	return 0;
}

//线性表的第i个位置插入一个值,插入平均移动次数为:n/2 
bool ListInsert(Sqlist *&L,int i,int e){
	if(i>L->length||i<0){
		return false;//插入位不合法 
	}
	i--;//线性表的逻辑位置是从1开始,故:减1
	//往后面移动 
	for(int j = L->length;j>i;j--){
		L->data[j] = L->data[j-1]; 
	} 
	L->data[i] = e; 
	L->length++;//长度增 1 
	return true; 
} 

//删除线性表第i个位置的值
bool ListDelete(Sqlist *&L,int i,int &e){
	if(i>L->length||i<0){
		return false;
	}
	i--;//线性表逻辑号从1开始 
	e = L->data[i];//赋值
	//往前面移动 
	for(int j = i;j<L->length-1;j++){
		L->data[j] = L->data[j+1];
	} 
	L->length--;
	return true;
} 

//创建一个顺序线性表 
void CreateList(Sqlist *&L,int a[],int n){
	int i = 0,k = 0;
	L = new Sqlist();//返回的是一个地址,要用指针接受,不能直接用对象接收 
	for(i = 0;i<n;i++){
		L->data[i] = a[i];
		k++;
	}
	L->length = k;
}

//销毁线性表
void DestoryList(Sqlist *&L){
	delete L;
} 

//打印输出
void GetList(Sqlist *&L){
	for (int i =0;i<L->length;i++){
		cout<<L->data[i]<<"  ";
	} 
} 
//初始化线性表 
void InitList(Sqlist *&L){
	L = new Sqlist;
	L->length = 0; 
} 

//判断线性表是否空
bool ListEmpty(Sqlist *L){
	return (L->length == 0);
}

//线性表的长度
int ListLength(Sqlist *L){
	return (L->length);
}

//

//求线性表中第i个数据元素
int GetElem(Sqlist *L,int i){
	if(i>L->length||i<0){
		return 0;//越界 
	}
	return (L->data[i]); 
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值