@資料結構C/C++版(5)《棧的順序儲存結構以及進棧和出棧操作的實現》

GY6662000發表於2020-12-08

@資料結構C/C++版(5)《棧的順序儲存結構以及進棧和出棧操作的實現》

順序儲存結構可以實現一片連續的儲存空間,相對於鏈式則會出現記憶體大小較難調節。

#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 10//儲存空間初始分配量
#define STACKINCREMENT 10//儲存空間分配增量
 
typedef struct{
	int *base;//順序棧的棧頂指標 
	int *top;//棧底指標 
	int stacksize;//定義棧的儲存空間大小 
}ShunxuStack;

void InitStack(ShunxuStack &S){//建立棧 
	S.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));
	if(!S.base){
		printf("記憶體分配失敗\n");
		}
		S.top=S.base;
		S.stacksize=STACK_INIT_SIZE;
		printf("記憶體分配成功\n");
		}

void StackEmpty(ShunxuStack S){//判斷棧是否為空 
	if(S.top==S.base){
		printf("\n棧為空\n"); 
	}
	printf("\n棧不為空\n");
	}

void Push(ShunxuStack &S,int e){//將元素壓入棧 
	if(S.top-S.base>=S.stacksize){
S.base=(int*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));
		//使用realloc實現追加增加記憶體 
		S.top=S.base+S.stacksize;//
		S.stacksize+=STACKINCREMENT;//棧的長度完成增加 
	}
	*S.top++ =e;
	printf("\n壓入棧的元素為:%d\n",e);
}

void Pop(ShunxuStack &S){//棧頂元素出棧(刪除) 
    if(S.top==S.base){
    	printf("\n棧為空\n");
    	}
	int e=*--S.top;
	printf("\n刪除的棧的元素為:%d\n",e);		
} 

void Show(ShunxuStack S){//顯示棧中元素 
	while(S.top-S.base!=0){
		printf(" %d",*S.base);
		*S.base++;
	}printf("     (棧頂元素為最右邊的元素)"); 
}

int main(){
	ShunxuStack S;
	InitStack(S);
	Push(S,1);
	Push(S,2);
	Push(S,3);
	StackEmpty(S);
	Show(S);
	Pop(S);
	Show(S);
}

在這裡插入圖片描述

相關文章