zoukankan      html  css  js  c++  java
  • 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 ;
    }
    
  • 相关阅读:
    resultMap之collection聚集
    try{}catch{}finally{}使用总结
    动手动脑兼课后作业2
    第一个psp0级
    原码反码补码
    动手动脑兼课后作业
    第七周进度报告
    第六周进度报告
    第五周进度报告
    《大道至简》读后感
  • 原文地址:https://www.cnblogs.com/maskerk/p/7348930.html
Copyright © 2011-2022 走看看