C++ 棧基本操作

一:目的

用C++實現棧的基本操作;

二:實現

1. 首先定義棧的結構和類,書寫在stack.h中 

# include <iostream>
using namespace std;

#define STACK_INIT_SIZE 100 //存儲空間的初始分配量
#define STACKINCREMENT 10   //存儲空間的分配增量stackincrement
typedef int SElemType;

 typedef struct{
     SElemType *base;	//指向棧底的指針
     SElemType *top;	//指向棧頂的紙指針
     int stacksize;		//已分配的存儲空間
}SqStack;

class Stack
{
public:
	bool InitStack();			//初始化
	bool push(SElemType val);	//進棧操作
	int pop(SElemType &val);	//出棧操作
	void print();				//打印
	void FreeStack();	//釋放

private:
	SqStack s;
};
2. 實現代碼放在stack.cpp中,具體如下

# include "statck.h"


//初始化棧
bool Stack::InitStack()
{
	s.base = (int *)malloc(sizeof(SElemType) * STACK_INIT_SIZE);
	if(!s.base)
		return false;
	s.top = s.base;
	s.stacksize = STACK_INIT_SIZE;
	return true;

}

//進棧操作
bool Stack:: push(SElemType val)
{
	if(s.top - s.base >= s.stacksize)
	{
		//已滿,重新申請
		s.base = (int *)realloc(s.base, sizeof(SElemType) * (s.stacksize + STACKINCREMENT));
		if(!s.base)
			return false;
		s.top = s.base + s.stacksize;
		s.stacksize += STACKINCREMENT;
	}
	*s.top =val;
	s.top++;
	return true;
}	


//出棧操作
int Stack:: pop(SElemType &val)
{
	if(s.top == s.base)
		return false;
	val = *(s.top-1);
	s.top--;
	return true;
}	

//打印
void Stack::print()
{
	SElemType *top_temp = s.top;
	while(top_temp!= s.base  && *(top_temp-1))
	{
		//棧不爲空並且有值
		top_temp--;
		cout<< *top_temp<<endl;

	}
}

//釋放
void Stack::FreeStack()
{
	if(s.base == s.top)
	{
		cout << "隊列爲空,不需要釋放"<<endl;
		return;
	}
	free(s.base);
	s.top = s.base;
	s.stacksize = STACK_INIT_SIZE;
}
3.簡單測試如下

	Stack s ;
	s.InitStack();
	s.FreeStack();
	s.push(1);
	s.push(2);
	s.push(3);
	s.push(4);
	s.push(5);
	s.FreeStack();
	s.InitStack();
	s.push(6);
	s.push(7);
	s.push(8);
	s.push(9);
	s.push(10);
	s.print();
	cout << "==========================" << endl;
	int val;
	for(int i = 0; i <10;i++)
	{
		s.pop(val);
		cout << val << endl;
	}
	system("pause");












發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章