1. 程式人生 > >資料結構--C語言--順序表元素的逆置

資料結構--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);
	
}