02动态顺序表[数据结构学习笔记]

#文章为入门菜鸟在学习过程中的笔记,望各位大佬能帮忙指出错误。感激万分

#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define ERROR 1
#define FALSE 0
#define OK 1
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status; 

#define InitSize 5 	//初始化分配空间为5 
// 声明一个结构体表示顺序表 
typedef struct{
	int *data;
	int length;
	int listsize;
}SqList;

//	初始化顺序表 
Status InitList_sq(SqList &L){ 	//sq表示顺序表 
	L.data=(int*)malloc(sizeof(int)*InitSize);	//malloc分配空间 
	if(!L.data) exit(OVERFLOW);  //若存储成功则返回地址若失败则为0,所以失败后则报错
	L.length=0; 
	L.listsize=InitSize;
	return OK;
}

// 输出顺序表
void PrintList_sq(SqList &L){
	for(int i=0;i<L.length;i++){
		printf("%d ",L.data[i]);
	}
	printf("\n顺序表的表长为%d\n",L.length);
	printf("-------------------------------\n");
} 

// 在第i个位置插入一个元素e 
Status ListInsert_sq(SqList &L,int i,int e) {
	if(i<1||i>L.length+1) return ERROR;		//i合法值为 1 <= i >=L.length + 1 
	if(L.length>=L.listsize){
		int *newbase = (int*)realloc(L.data,sizeof(int)*(L.listsize+1));		//realloc为malloc分配的空间重新设置 
		if(!newbase) exit(OVERFLOW);
		L.data=newbase;
		L.listsize++;
	}
	for(int j=L.length-1;j>=i-1;j--){
		L.data[j+1]=L.data[j];
	}
	L.data[i-1]=e;
	L.length++;
	return OK;
}

//删除第i个位置的元素
Status ListDelete_sq(SqList &L,int i){
	if(i<1||i>L.length-1) exit(ERROR); 
	for(int j=i-1;j<L.length-1;j++){
		L.data[j]=L.data[j+1];
	}
	L.length--;
	return OK;
}

//查找元素返回其位置
int LocateElem_sq(SqList &L,int e){
	for(int i=0;i<L.length;i++){
		if(L.data[i]==e)return i+1;
	}
	return 0; 
	
} 

//集合合并
void Union(SqList &La,SqList &Lb){

	for(int i=0;i<Lb.length;i++){
		int e = Lb.data[i];
		if(!LocateElem_sq(La,e)){
			ListInsert_sq(La,La.length+1,e);
		}
	}
} 

//排序
Status ListSort_sq(SqList &L){
	for(int i=0;i<L.length;i++){
		for(int j=i+1;j<L.length;j++){
			if(L.data[i]>L.data[j]){
				int	temp=L.data[j];
				L.data[j]=L.data[i];
				L.data[i]=temp;
			}	
		}
	}
	return OK;
}  
 


int main(){
	SqList L;
	InitList_sq(L);
	printf("输入%d个数以空格隔开:\n",L.listsize);
	for(int i=0;i<L.listsize;i++){
		scanf("%d",&L.data[i]);
		L.length++;
	} 
	PrintList_sq(L);
	ListInsert_sq(L,3,50);
	PrintList_sq(L);	//输出插入后的 顺序表 
	ListInsert_sq(L,6,21);
	PrintList_sq(L);	
	ListDelete_sq(L,2);	//删除第2个元素 
	PrintList_sq(L);
	printf("%d的位置为%d",12,LocateElem_sq(L,12));
	
	//合并为集合:
	SqList La,Lb;

	InitList_sq(La);
	printf("输入%d个数以空格隔开:\n",La.listsize);
	for(int i=0;i<La.listsize;i++){
		scanf("%d",&La.data[i]);
		La.length++;
	} 
	
	InitList_sq(Lb);
	printf("输入%d个数以空格隔开:\n",Lb.listsize);
	for(int i=0;i<Lb.listsize;i++){
		scanf("%d",&Lb.data[i]);
		Lb.length++;
	}  
	
	ListSort_sq(La);
	PrintList_sq(La);
	PrintList_sq(Lb);
	Union(La,Lb);
	ListSort_sq(La);
	PrintList_sq(La);
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿明同学

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值