现在的位置: 首页 > 综合 > 正文

数据结构—-顺序栈

2019年01月10日 ⁄ 综合 ⁄ 共 1955字 ⁄ 字号 评论关闭

与线性表类似栈也有两种存储结构,即顺序存储结构和链表存储结构。栈的顺序存储结构亦称为顺序栈,它是运算受限的顺序表。

#pragma once

class stack
{
public:
	stack(void);
	stack(int maxsize);
	~stack(void);
private:
	int *m_list;
	int m_maxsize;
	int m_top;
public:
	bool push(int value);
	bool pop();
	bool top(int *value);
	bool empty();
	bool full();
	int size();
	void output();
};

#include "StdAfx.h"
#include "stack.h"


stack::stack(void)
{
	m_maxsize = 10;
	m_list = new int[m_maxsize];
	for(int i=0; i<m_maxsize; i++)
	{
		m_list[i] = 0xFFFFFFFF;
	}
	m_top = -1;
}


stack::stack(int maxsize)
{
	m_maxsize = maxsize;
	m_list = new int[m_maxsize];
	for(int i=0; i<m_maxsize; i++)
	{
		m_list[i] = 0xFFFFFFFF;
	}
	m_top = -1;
}

stack::~stack(void)
{
	delete []m_list;
	m_top = -1;
	m_list = NULL;
}

bool stack::push(int value)
{
	if (!full())
	{
		m_list[m_top] = value;
		m_top++;
		return true;
	}
	return false;
}

bool stack::pop()
{
	if(!empty())
	{
		m_top--;
		return true;
	}
	return false;
}

bool stack::top(int *value)
{
	if (!empty())
	{
		*value = m_list[m_top - 1];
		return true;
	}
	*value = 0xFFFFFFFF;
	return false;
}

bool stack::empty()
{
	if (m_top == -1)
	{
		return true;
	}
	return false;
}

bool stack::full()
{
	if (m_top + 1 == m_maxsize)
	{
		return true;
	}
	return false;
}

int stack::size()
{
	return m_top + 1;
}

void stack::output()
{
	printf("---------------------------------\n");
	printf("stack information:\n");
	printf("maxsize=%d\n", m_maxsize);
	printf("top=%d\n", m_top);
	for(int i=0; i<m_top; i++)
	{
		printf("index%d=%d\n", i, m_list[i]);
	}
}

 

主函数测试:

 

// sequstack.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "stack.h"

int _tmain(int argc, _TCHAR* argv[])
{
	stack mystack(10);

	//入栈 0 --- 9
	/*for(int i=0; i<10; i++)
	{
		mystack.push(i);
	}
	
	if (mystack.full()) printf("stack is full\n");
	printf("stack size=%d\n", mystack.size());

	//出栈
	for(int i=0; i<10; i++)
	{
		int value = 0;
		mystack.top(&value);
		mystack.pop();
		printf("pop value=%d\n", value);
	}
	if (mystack.empty()) printf("stack is empty\n");
	printf("stack size=%d\n", mystack.size());*/

	mystack.push(8);
	mystack.push(9);
	mystack.push(10);
	mystack.push(11);
	
	printf("size=%d\n", mystack.size());
	int count = mystack.size();

	for(int i=0; i<count; i++)
	{
		int value = 0;
		mystack.top(&value);
		printf("value = %d\n", value);
		mystack.pop();
	}

	getchar();
	return 0;
}

抱歉!评论已关闭.