zoukankan      html  css  js  c++  java
  • 栈的基本操作

    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    const int INIT_SIZE=100;
    const int INCREASE=10;
    struct SqStack {
    	int *base;
    	int *top;
    	int stacksize;
    };
    int InitStack(SqStack &S) {
    	S.base=(int *)malloc(INIT_SIZE*sizeof(int));
    	if (!S.base)
    		exit(-1);
    	S.top=S.base;
    	S.stacksize=INIT_SIZE;
    	return 1;
    }
    int GetTop(SqStack S,int e)
    {
    	if (S.top==S.base)
    	return -1;
    	e=*--S.top;
    	return 1;
    }
    int Push(SqStack &S,int e)
    {
    	if (S.top-S.base>=S.stacksize) {
    	S.base=(int *)realloc(S.base,(S.stacksize+INCREASE)*sizeof(int));
    	if (!S.base)
    	exit(-1);
    	S.top=S.base+S.stacksize;
    	S.stacksize+=INCREASE;
    	}
    	*S.top++=e;
    	return 1;
    }
    int Pop(SqStack &S,int &e) {
    	if (S.base==S.top)
    	return -1;
    	e=*--S.top;
    	return 1;
    }
    void DestroyStack(SqStack &S)
    {
    	S.top = NULL;
    	S.stacksize = 0;
    	free(S.base);
    	S.base = NULL;
    }
    void ClearStack(SqStack &S)
    {
    	S.top = S.base;
    }
    void StackEmpty(SqStack &S)
    {
    	if (S.top-S.base>0)
    		cout << "FALSE" << endl;
    	else
    		cout << "TRUE" << endl;
    }
    void StackLength(SqStack &S)
    {
    	cout << S.top - S.base << endl;
    }
    void StackTraverse(SqStack &S)
    {
    	if (S.top==S.base) {
    		cout << "The stack is empty." << endl;
    	}
    	else {
    		while (S.top>S.base) {
    			cout << *--S.top << " ";
    		}
    		cout << endl;
    	}
    }
    int main()
    {
    	int n,e;
    	SqStack stack;
    	stack.base = stack.top = NULL;
    	stack.stacksize = 0;
    	cout << "Please enter what you want to do.The zero is exit." << endl
    		 << "1. Initial the stack." << endl
    		 << "2. Get top elem." << endl
    		 << "3. Push elem to the stack." << endl
    		 << "4. Pop elem from the stack." << endl
    		 << "5. Destroy the stack." << endl
    		 << "6. Clear the stack." << endl
    		 << "7. Is the stack empty?" << endl
    		 << "8. Length of the stack." << endl
    		 << "9. Print the elem of the stack." << endl;
    	while (cin>>n&&n) {
    		switch (n) {
    			case 1:
    				if (InitStack(stack))
    				cout<<"Initialize the success."<<endl;
    				else
    				cout<<"Initialize the failed."<<endl;
    				break;
    			case 2:
    				if (GetTop(stack,e)==1)
    				cout<<"Success!The result is "<<e<<"."<<endl;
    				else
    				cout<<"Failed.The stack is empty."<<endl;
    				break;
    			case 3:
    				cout<<"Please enter the number you want to push."<<endl;
    				cin>>e;
    				if (Push(stack,e))
    				cout<<"Push successfully!"<<endl;
    				else
    				cout<<"Push failed."<<endl;
    				break;
    			case 4:
    				if (Pop(stack,e))
    				cout<<"Pop successfully.The result is "<<e<<"."<<endl;
    				else
    				cout<<"The stack is empty."<<endl;
    				break;
    			case 5:
    				if (!stack.base)
    					cout << "The stack isn't initialized." << endl;
    				else {
    					DestroyStack(stack);
    				}
    				break;
    			case 6:
    				if (!stack.base)
    					cout<<"The stack isn't initialized."<<endl;
    				else {
    					ClearStack(stack);
    				}
    				break;
    			case 7:
    				if (!stack.base)
    					cout<<"The stack isn't initialized."<<endl;
    				else {
    					StackEmpty(stack);
    				}
    				break;
    			case 8:
    				if (!stack.base)
    					cout<<"The stack isn't initialized."<<endl;
    				else {
    					StackLength(stack);
    				}
    				break;
    			case 9:
    				if (!stack.base)
    					cout<<"The stack isn't initialized."<<endl;
    				else {
    					StackTraverse(stack);
    				}
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    这是一个关于Latex的测试
    在Mac下配置php开发环境:Apache+php+MySql
    CSS 颜色代码大全
    APP中关于Android和IOS与网页交互
    linux crontab
    dedecms中的内容页中的变量
    lamp中的Oracle数据库链接
    phpcms使用session的方法
    linux系统下nginx安装目录和nginx.conf配置文件目录
    window7+wamp环境配置Oracle数据库连接
  • 原文地址:https://www.cnblogs.com/xyqxyq/p/10211374.html
Copyright © 2011-2022 走看看