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);
}


猜你喜欢

转载自blog.csdn.net/Ustinianljm/article/details/121876610