• 堆栈之数组实现


    堆栈

    • 先入后出

    数组实现

    • 缺点:需要先申请指定大小的内存,需要检验是否非空是否栈满。
    • 操作:生成堆栈、检验非空、检验是否已满、入栈(PUSH),出栈(POP)。

    初始化

    #define MAXSIZE 100
    typedef struct SNode *Stack;
    struct SNode
    {
    	int data[MAXSIZE];
    	int top;
    };
    

    PUSH

    void Push(Stack PtrS, int item)
    {
    	if (PtrS->top == MAXSIZE - 1)
    	{
    		printf("FULL");
    		return;
    	}//检验满栈
    	else
    	{
    		PtrS->data[++(PtrS->top)] = item;
    		return;
    	}//top++并且存入数据
    }
    

    POP

    int Pop(Stack PtrS)
    {
    	if (PtrS->top == -1)
    	{
    		printf("Empty!");
    		return;
    	}//检验非空
    	else
    		return (PtrS->data[(PtrS->top)--]);
    }//return数据并且top--
    

    用一种方法

    • 用一个数组实现两个栈,有空间就能push。

    初始化

    struct DStack
    {
    	int data[MAXSIZE];
    	int top1;
    	int top2;
    };
    

    PUSH

    void Push(struct DStack *PtrS, int x, int tag)
    {
    	if (PtrS->top2 - PtrS->top2 == 1)//检验已满
    	{
    		cout << "FULL";
    		return;
    	}
    	if (tag == 1)PtrS->data[++(PtrS->top1)] = x;
    	else PtrS->data[--(PtrS->top2)] = x;
    }
    

    POP

    int Pop(struct DStack *PtrS, int tag)
    {
    	if (tag == 1) {
    		if (PtrS->top1 == -1) {
    			cout << "Stack 1 is empty.";
    			return NULL;
    		}
    		else return PtrS->data[(PtrS->top1)--];
    	}
    	else {
    		if (PtrS->top2 == MAXSIZE) {
    			cout << "Stack 2 is empty";
    			return NULL;
    		}
    		else return  PtrS->data[(PtrS->top2)++];
    	}
    }
    
  • 相关阅读:
    CF1442E. Black, White and Grey Tree
    CF1442D. Sum
    CF1444D. Rectangular Polyline
    arc107F
    外心与垂心关系
    CF1434E. A Convex Game
    CF1434D. Roads and Ramen
    arc106E
    arc106F
    CF704E. Iron Man
  • 原文地址:https://www.cnblogs.com/vancasola/p/7624232.html
Copyright © 2020-2023  润新知