目录

​​​​​​​​​​​​​​

目录

顺序表-动态分配顺序存储结构

基本操作

1.顺序表-初始化

2.创建顺序表

3.顺序表-按位插入

4.顺序表-按位删除

5.顺序表-查找-按值查找位 

6.顺序表-清空

7.顺序表-判空

8.顺序表-销毁

9.顺序表-打印

代码实现结果


顺序表-动态分配顺序存储结构

#define Max 100	//顺序表存储空间的初始分配量
#define Increase 10	//顺序表存储空间的分配增量 
#define ElemType char

typedef struct{
	ElemType *Data;//存储空间基址 
	int Listsize;//当前数据最大存储容量
	int length;//当前长度 (数据个数) 
}Sq;

基本操作

1.顺序表-初始化

void ListSq_Init(Sq &L)
{
	L.Data=(ElemType *)malloc(sizeof(char)*Max);//分配初始存储空间 
	L.Listsize =Max;//初始存储数据最大容量=100 
	L.length =0;//当前长度=0 
	if(L.Data==NULL){
		printf("初始化失败\n");//存储空间分配失败,程序异常退出 
		exit(-1);
	}
	else{
		printf("初始化成功\n");//存储空间分配成功 
	}	
}

2.创建顺序表

void Listsq_Creat(Sq &L){
	int n=0;
	printf("请输入要创建的数据个数:");
	scanf("%d",&n);//输入数据长度 
	getchar();
	if(n>L.Listsize){//若插入数据长度> 储数据最大容量,重新分配存储空间,将其扩大 
		ElemType *newdata=(ElemType *)realloc(L.Data ,(n)*sizeof(ElemType));
		if(!newdata){
			printf("增加存储空间失败\n");//存储空间分配失败,程序异常退出 
			exit(-1);
		}
	 	else{
			L.Data =newdata;//存储空间分配成功 
			L.Listsize=n;//当前数据最大存储容量=即将插入数据的总长度 
			printf("增加存储空间成功\n");
		}
	}
	while(n--){
		printf("输入数据:");
		scanf("%c",&L.Data[L.length++]);//输入数据,每输入一个数据,数据长度+1 
		getchar();
	}
	printf("创建顺序表成功\n");
}

3.顺序表-按位插入

void ListSq_Insert(Sq &L,int pos,ElemType newval){
	if((pos-1>L.length) ||(pos<1)) {//若选择插入位置不合法,或插入位置>当前数据长度 (插入位置不在表中),则插入失败,程序异常退出 
		printf("按位插入失败\n");
		exit(-1);
	}
	if(L.length ==L.Listsize){
		ElemType *newdata=(ElemType *)realloc(L.Data ,(L.Listsize+Increase)*sizeof(ElemType));//若当前存储空间已满,则先扩大存储空间再插入数据 
		if(!newdata){
	 		printf("增加存储空间失败\n");//存储空间分配失败,程序异常退出 
	 		exit(-1);
		}
	 	else{
	 		L.Data =newdata;//存储空间分配成功 
	 		L.Listsize+=Increase;//当前数据最大存储容量在原基础上扩大10 
	 		printf("增加存储空间成功\n");
		}
	}
	for(int i=L.length;i>pos-1;i--){ 
		L.Data[i]=L.Data[i-1];//将插入位后所有数据后移一位,为插入数据留个空间,以免覆盖原有数据 
	}
 	L.Data[pos-1]=newval;//插入数据 
	L.length++;//当前数据长度+1 
	printf("按位插入成功\n");
}

4.顺序表-按位删除

void ListSq_Delete(Sq &L,int pos){
	if(pos<1||pos>L.length ||L.length==0){//若删除位不合法或表为空,则不能进行删除,程序异常退出 
		exit(-1);
	}
	else{
		for(;pos<=L.length;pos++){
			L.Data[pos-1]=L.Data[pos];//将删除位后面所有数据前移一位,覆盖删除位 
		}
		L.length--;//当前数据长度-1 
		printf("按位删除成功\n");
	}
}

5.顺序表-查找-按值查找位 

int ListSq_Seek(Sq L,ElemType val){
	int i=0;
	while(i!=L.length){//将全部数据遍历 
		if(L.Data[i]==val){//若查找到值,则返回当前位置(下标+1) 
			printf("查找成功\n");
			return i+1;
	  	}
	  	else{
			i++;
			continue;
	  	}
 	}
	printf("查找失败\n");//若数据遍历完,没有此值,则返回-1 
	return -1;
}

6.顺序表-清空

void ListSq_empty(Sq &L) 
{
	if(L.Data ==NULL) {//若表已被销毁,则清空失败 
		printf("清空失败\n");
		exit(-1);
	}
	else{
		while(L.length--){//若表未被销毁,将表中数据置0 
			L.Data[L.length]='0';
		}
		L.length=0;
		printf("清空成功\n");
	}
}

7.顺序表-判空

void ListSq_Isvoid(Sq L){
	if(!L.length){//表的长度==0,则为空 
		printf("表为空\n");
	}
	else{//表长度!=0 ,则不为空 
		printf("表不为空\n");
	}
}

8.顺序表-销毁

void ListSq_Destroy(Sq &L){ 
	L.length=0;
	free(L.Data); 
	printf("销毁成功\n");
}

9.顺序表-打印

void ListSq_Print(Sq L)
{
	if(L.length ==0){
		printf("打印失败\n");
	}
	else{
		int i;
		for(i=0;i<L.length;i++){
			printf("%c ",L.Data[i]);
		} 
		printf("打印成功\n");
 	}
}

代码实现结果

int main(){
    Sq L;//创建顺序表 
    ListSq_Init(L);//初始化顺序表 
    ListSq_Isvoid(L);//判空 
    Listsq_Creat(L);//给顺序表赋值 
    ListSq_Print(L);//打印顺序表 
    ListSq_Insert(L,1,'A');//在顺序表首位插入A
    ListSq_Print(L);//打印顺序表 
    printf("元素B所在位置:%d\n",ListSq_Seek(L,'B'));//按值‘B’查找其所在位置 
    ListSq_Delete(L,1);//删除第1位元素 
    ListSq_Print(L);//打印顺序表 
    ListSq_empty(L);//清空顺序表 
    ListSq_Destroy(L);//销毁顺序表 
}


Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐