数据结构--C语言--顺序表元素的逆置

#include<stdio.h>
#include<stdlib.h>

#define OK 1
#define OVERFLOW 0
#define LIST_INIT_SIZE 10
#define LISTINCREMENT 5

typedef struct{
	int *elem;//基地址
	int length;//顺序表长度
	int listsize;//顺序表的存储空间 
}Sqlist;

//初始化顺序表
int InitList(Sqlist *l){
	l->elem = (int *)malloc(LIST_INIT_SIZE*sizeof(int));
	if(!l->elem){
		printf("存储空间分配失败!\n");
		exit(OVERFLOW);
	}
	l->length = 0;
	l->listsize = LIST_INIT_SIZE;
	return OK;
}

//给顺序表赋值
int CreatList(Sqlist *l,int length){
	printf("请输入元素值:\n");
	for(int i=0;i<length;i++){
		scanf("%d",l->elem+i);
	}
	l->length = length;//如果不给length赋值的话就一直是0 无法进行逆置和输出 
	return OK;
} 
//输出顺序表
void PrintList(Sqlist *l){
	for(int i=0;i<l->length;i++) {
		printf("%d ",l->elem[i]);
	}
}

//是否需要增加分配空间
int IncreaseList(Sqlist *l,int length){
	if(length>l->listsize){
		int *newbase;
		newbase = (int *)realloc(l->elem,(l->listsize+LISTINCREMENT)*sizeof(int));
		if(!newbase){
			printf("存储空间分配失败!\n");
			exit(OVERFLOW);
		}
		l->elem = newbase;
		l->listsize += LISTINCREMENT;
	}
	return OK;
} 

//逆置函数
int TransList(Sqlist *l){
	for(int i=0;i<(l->length)/2;i++){
		int temp = l->elem[i];
		l->elem[i] = l->elem[l->length-1-i];
		l->elem[l->length-1-i] = temp;
	}
	return OK;
}

main(){
	int length;
	Sqlist l;
	InitList(&l);
	printf("你想输入多少个元素?\n");
	scanf("%d",&length);
	IncreaseList(&l,length);//是否需要增加分配空间
	CreatList(&l,length);
	PrintList(&l);
	printf("\n逆置后的结果为:\n");
	TransList(&l);
	PrintList(&l);
	
}

猜你喜欢

转载自blog.csdn.net/J_SUNV/article/details/84501061