栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构纯C语言版——顺序表实现及有序表的定义

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构纯C语言版——顺序表实现及有序表的定义

#include
#include
#include
#include
typedef int Elemtype;
typedef int Status;
#define MAXSIZE 20
#undef OVERFLOW
#define OVERFLOW -2
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
//顺序表数据类型定义——动态分配 
typedef struct{
	Elemtype *data;
	int length;
	int listSize;
}SqList; 

Status InitSqList(SqList *Sq);//初始化
Status DestorySqList(SqList *Sq);//销毁
Status ClearSqList(SqList *Sq);//清除
Status SqListEmpty(SqList Sq);//判断是否为空
Status InsertElem(SqList *Sq,Elemtype e,int i);//在位置i上插入元素e 
Status DeleteElem_i(SqList *Sq,int i,Elemtype *e);//删除第i个元素并返回元素值 
int DeleteElem_e(SqList *Sq,Elemtype e);//删除第一个值位e的元素并返回删除的元素位置
int LocalElem(SqList Sq,Elemtype e);//查找第一个值为e的元素并返回元素位置
Status ExitElem(SqList *Sq,Elemtype e,int k);//将第i个位置的元素替换为e
//获取顺序表的长度
int GetLength(SqList Sq);
//获取第i个数据元素的值
Status GetElem(SqList Sq,int i,Elemtype *e);
//归并算法实现——有序表的合并
void MergeList_Sq(SqList *LA,SqList *LB,SqList *LC);
int main(){
	SqList La,Lb,Lc;
	int i;Elemtype e;
	InitSqList(&La);
	InsertElem(&La,1,1);
	InsertElem(&La,3,2);
	InsertElem(&La,5,3);
	InsertElem(&La,6,4);
	InsertElem(&La,9,5);
	for(i=0;idata=(Elemtype *)malloc(sizeof(Elemtype));
	if(!Sq->data){
		return OVERFLOW;
	} 
	Sq->length=0;
	Sq->listSize=MAXSIZE;
	return OK;
}
Status DestorySqList(SqList *Sq){//销毁——动态分配 
	if(Sq->data){
		free(Sq->data);
		Sq->data=NULL;
		Sq->length=0;
		Sq->listSize=0; 
	}
	return OK;
}
Status ClearSqList(SqList *Sq){
	//清除——没有删除数据但是有效长度置为0 
	Sq->length=0;
}
Status SqListEmpty(SqList Sq){
	//判断是否为空
	return (!Sq.length);
}
Status InsertElem(SqList *Sq,Elemtype e,int i){
	//在第i个位置上插入元素e
	if(i<=0||i>Sq->length+1){//
		return ERROR;
	}
	if(Sq->length==Sq->listSize){//
		return ERROR;//
	}//
	int j;
	for(j=Sq->length;j>=i;j--){
		Sq->data[j]=Sq->data[j-1];
	}
	Sq->data[i-1]=e;
	Sq->length++; //
	return OK; 
} 
Status DeleteElem_i(SqList *Sq,int i,Elemtype *e){
	//删除第i个元素并返回元素值 
	if(i<=0||i>Sq->length){
		return ERROR;
	}
	*e=Sq->data[i-1];
	int j;
	for(j=i-1;jlength;j++){
		Sq->data[j]=Sq->data[j+1];
	}
	Sq->length--;
	return OK;	
}
int DeleteElem_e(SqList *Sq,Elemtype e){//删除第一个值位e的元素并返回删除的元素逻辑位置
	//Elemtype data_e;
	int i,j;
	for(i=0;ilength;i++){
		if(e==Sq->data[i]){
			break;
		}
	} 
	for(j=i;jlength-1;j++){
		Sq->data[j]=Sq->data[j+1];
	}
	if(i==Sq->length){
		return -1;
	}
	Sq->length--; 
	return i;
}
int LocalElem(SqList Sq,Elemtype e){//查找第一个值为e的元素并返回元素位置
	int i;
	for(i=0;iSq->length){
		return ERROR;
	}
	Sq->data[k-1]=e;
	return OK;
}
int GetLength(SqList Sq){
	return Sq.length;
}
Status GetElem(SqList Sq,int i,Elemtype *e){
	if(i<0||i>=Sq.length){
//		printf("i=%d Length=%dn",i,Sq.length);
		return ERROR;
	}
//	printf("***n");
	*e=Sq.data[i];
	return OK;
}
void MergeList_Sq(SqList *La,SqList *Lb,SqList *Lc){//有序表的合并 ——由小到大 
	int i=0,j=0,k=1;
//	Lc->length= La->length+Lb->length;
//	Lc->data=(Elemtype *)malloc(sizeof(Elemtype)*(Lc->length));
	Elemtype ai,bj;
	while(ilength&&jlength){
		GetElem(*La,i,&ai);
		GetElem(*Lb,j,&bj);
		if(ai<=bj){
			InsertElem(Lc,ai,k++);
			i++;
		}else{
			InsertElem(Lc,bj,k++);
			j++;
		}
	}
	while(ilength){
		GetElem(*La,i++,&ai);
		InsertElem(Lc,ai,k++);
	}
	while(jlength){
		GetElem(*Lb,j++,&bj);
		InsertElem(Lc,bj,k++);
	}
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/784701.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号