线性表

线性表

顺序线性表

#include<stdio.h>
#include<stdlib.h>
//宏定义

#define LT(a,b) ((a)<(b))
#define N 100

#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10

typedef int ElemType ;

typedef struct LNode{
	ElemType *elem ;	//存储空间基地址
	int lenght ;		//当前线性表的长度
	int listsize ;		//当前已分配的线性表空间长度
}SqList;

//初始化空的线性表
bool initList(SqList &L , int lenght){
	if(lenght==0) lenght = LIST_INIT_SIZE ;
	L.elem=(ElemType *)malloc(lenght*sizeof(ElemType));
	L.lenght = 0 ;
	L.listsize = lenght ;
	return true ;
}

//在线性表的i位置出插入元素e
bool insertList(SqList &L , ElemType e , int i ){
	ElemType *p , *q ;
	if(i<0 || i>L.lenght)return 0 ;
	if(L.lenght >= L.listsize){
		ElemType *newbase = (ElemType *)realloc( L.elem , (L.listsize + LISTINCREMENT)*sizeof(ElemType));
		if(!newbase) return 0 ;
		L.elem = newbase ;
		L.listsize += LISTINCREMENT ;
	}
	q = &L.elem[i];
	for( p = &L.elem[L.lenght] ; p>=q ; --p ){
		*p = *(p-1);
	}
	*q = e ;
	L.lenght += 1; 
	return true ;
}

//排序
void sortList(SqList &L){
}

//删除线性表位置i出的元素,并用e返回删除的元素数值
bool deleteListElem(SqList &L , int i , ElemType &e){
	int *p , *q ;
	if(i<0 || i>L.lenght)return 0 ;
	q = &L.elem[i];
	e = *q ;
	for( p = q ; p < (L.elem+L.lenght) ; p++ ){
		*p = *(p+1);
	}
	--L.lenght ;
	return true; 
}

//打印线性表
void printList(SqList L){
	printf("当前数值:");
	int i ;
	for(i = 0 ; i < L.lenght ; i++){
		printf("%d ",L.elem[i]);
	}
	printf("\r\n");
}

//快速排序
int partition(){
}
void quickSort(){
}

// 合并两个线性表
void mergeList(SqList La , SqList Lb ,SqList &Lc){
	ElemType *pa , *pb , *pc ;
	Lc.listsize = La.lenght + Lb.lenght ;
	initList(Lc,Lc.listsize);
	Lc.lenght = Lc.listsize ;
	pc = Lc.elem ;
	pa = La.elem ;
	pb = Lb.elem ;
	while(pa<=&La.elem[La.lenght-1] && pb<=&Lb.elem[Lb.lenght-1]){
		if(*pa <= *pb) *pc++ = *pa++ ;
		else *pc++ = *pb++ ;
	}
	while(pa<=&La.elem[La.lenght-1]) *pc++ = *pa++ ;
	while(pb<=&Lb.elem[Lb.lenght-1]) *pc++ = *pb++ ;
}

int main(){
	SqList La , Lb , Lc ;
	int i ;
	initList(La,LIST_INIT_SIZE);
	int data[6] = {5,3,6,2,7,4};
	for( i = 0 ; i < 6 ; i++){
		insertList(La , data[i] , i);
	}
	printf("La:\r\n");
	printList(La);
	ElemType e ;
	deleteListElem(La,3,e);
	printList(La);

	int Bdata[5] = {1,3,2,4,6};
	initList(Lb,LIST_INIT_SIZE);
	for( i = 0 ; i < 5 ; i++ ){
		insertList(Lb , Bdata[i] , i);
	}
	printf("Lb:\r\n");
	printList(Lb);
	mergeList(La,Lb,Lc);
	printList(Lc);
	return 0 ;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值