zoukankan      html  css  js  c++  java
  • 线性结构的两种应用之一——栈

    线性结构的两种应用之一——栈

    • 定义:一种可以实现先进后出[1]的存储结构。

    • 分类:静态栈(数组),动态栈(链表)。

    • 算法:压栈,出栈。

    • 应用:函数调用,中断,表达式求值,内存分配,迷宫。


    • 代码如下:

    //2020.4.2/17.05
    #include<iostream>
    using namespace std;
    
    typedef struct Node
    {
    	int data;
    	struct Node* Next;
    }NODE, * PNODE;
    
    typedef struct Stack
    {
    	PNODE pTop;
    	PNODE pBottom;
    }STACK, * PSTACK;
    
    void init(PSTACK);
    void push(PSTACK,int);
    void traverse(PSTACK);
    bool pop(PSTACK,int*);
    void clear(PSTACK);
    
    
    int main()
    {	
    	int val;
    	STACK S;
    	PSTACK pS = &S;
    	init(pS);// ==init(&S);
    	push(pS, 5);
    	push(pS, 3);
    	push(pS, 2);
    	push(pS, 0);
    	traverse(pS);
    	
    	if (pop(pS, &val))
    	{
    		cout << "出栈成功,出栈的元素是" << val;
    	}
    	else
    		cout << "出栈失败";
    	traverse(pS);
    	clear(pS);
    	traverse(pS);
    	return 0;
    
    }
    void init(PSTACK pS)
    {
    	pS->pTop = (PNODE)malloc(sizeof(NODE));
    	pS->pBottom = pS->pTop;
    	pS->pBottom->Next = NULL;
    }
    void push(PSTACK pS, int val)
    {
    	PNODE pNew = (PNODE)malloc(sizeof(NODE));
    	pNew->data = val;
    	pNew->Next = pS->pTop;
    	pS->pTop = pNew;
    }
    void traverse(PSTACK pS)
    {
    	PNODE p = pS->pTop;
    	while (p->Next != NULL)
    	{
    		cout << p->data << " ";
    		p = p->Next;
    	}
    }
    bool pop(PSTACK pS, int* val)
    {
    	if (pS->pTop == pS->pBottom)
    	{
    		return false;
    	}
    	else
    	{
    		*val = pS->pTop->data;
    		PNODE p = pS->pTop;
    		pS->pTop = pS->pTop->Next;
    		free(p);
    		p->Next = NULL;
    		return true;
    	}
    }
    void clear(PSTACK pS)
    {	
    	PNODE p = pS->pTop;
    	while (pS->pTop != pS->pBottom)
    	{
    		pS->pTop = pS->pTop->Next;
    		free(p);
    		p = pS->pTop;
    	}
    }
    

    1. 推箱子大家都玩过吧,先推进去只能最后取出来 ↩︎

  • 相关阅读:
    Android logcat命令详解
    使用Dom4j操作XML
    最全面的常用正则表达式大全
    struts.xml配置文件(package,namespace,action)
    ActiveMQ入门实例
    Windows Intel VT-x开启
    Java ArrayList的不同排序方法
    Hibernate面试问题集锦: 概述
    10个有关String的面试问题
    50道Java线程面试题
  • 原文地址:https://www.cnblogs.com/yuuuuu422/p/12621230.html
Copyright © 2011-2022 走看看