CPP 栈 示例

#include<iostream>
#include<stdlib.h>
using namespace std;

typedef struct node
{
	int data;
	struct node *pNext;
}NODE,*PNODE;

typedef struct stack
{
	PNODE pTop;
	PNODE pBottom;
}STACK,*PSTACK;


bool ininStack(PSTACK);
bool pushStack(PSTACK , int );
int lengthStack(PSTACK);
bool traverseStack(PSTACK);
bool pop(PSTACK);
bool isempty(PSTACK pS);
void claer(PSTACK pS);
int main()
{
	STACK S;
	ininStack(&S);
	pushStack(&S,1);
	pushStack(&S,2);
	pushStack(&S,3);
	pushStack(&S,4);
	lengthStack(&S);
	traverseStack(&S);
	cout<<"长度为:"<<lengthStack(&S)<<endl;
	pop(&S);
	traverseStack(&S);
	cout<<"长度为:"<<lengthStack(&S)<<endl;
	claer(&S);
	return 0;
}

bool ininStack(PSTACK pS)//初始化栈
{
	PNODE pN = (PNODE)malloc(sizeof(NODE));
	if(pN == NULL)
	{
		cout<<"初始化失败!"<<endl;
		exit(-1);
	}
	pS->pTop = pN;
	pS->pBottom = pN;
	pS->pBottom->pNext = NULL;
	return true ;
}

bool pushStack(PSTACK pS, int val)//压栈
{
	PNODE pNew = (PNODE)malloc(sizeof(NODE));
	if(pNew == NULL)
	{
		cout<<"压栈失败!"<<endl;
		exit(-1);
	}
	pNew->data = val;
	pNew->pNext = pS->pTop;
	pS->pTop = pNew;
	return true;
}

bool traverseStack(PSTACK pS)//输出
{
	PNODE p = pS->pTop;
	while(p->pNext!=NULL)
	{
		cout<<p->data<<endl;
		p=p->pNext;
	}
	return true;
}

bool isempty(PSTACK pS)//是否为空
{
	if(pS->pTop == pS->pBottom)
		return true;
	else
		return false;
}

bool pop(PSTACK pS)//出栈
{
	if(isempty(pS))
	{
		cout<<"栈为空!"<<endl;
		return false;
	}
	cout<<"正在出栈..."<<endl;
	PNODE p;
	p = pS->pTop;
	pS->pTop = p->pNext;
	delete(p);
	p=NULL;
	return true;
}

int lengthStack(PSTACK pS)//计算栈长度
{
	int i=0;
	PNODE p=pS->pTop;
	while(p!=pS->pBottom)
	{
		i++;
		p=p->pNext;
	}
	return i;
}

void claer(PSTACK pS)//清栈
{
	if(isempty(pS))
	{
		cout<<"此为空栈!"<<endl;
		exit(0);
	}
	PNODE j;
	while(pS->pTop != pS->pBottom)
	{
		j = pS->pTop;
		pS->pTop = pS->pTop->pNext;
		delete(j);
		j = NULL;
	}
	if(pS->pTop == pS->pBottom)
		cout<<"清栈完成!"<<endl;
	return ;
}
原文地址:https://www.cnblogs.com/maskerk/p/7348930.html