zoukankan      html  css  js  c++  java
  • Stack,一个后进先出的集合容器

    今天刷LC的每日一题时,需要使用到“栈”这种数据结构。就顺便复习了有关“栈”的知识。
    本文就用C来复习(预习)“Stack”。

    特点

    Stack,本身就具有数据结构中栈的一般特性:后进先出

    定义Stack

    #include<stack>
    stack<typename> name;
    

    栈中元素的访问

    • top()
    • 只能访问其栈顶元素
    • 通过top()来获取(或遍历)

    常用的调用函数

    • push():入栈
    • pop():出栈(弹出栈顶元素)
    • top:获取栈顶元素
    • empty():判空,返回值是Bool类型,true为空,false为非空
    • size():返回stack内元素的个数

    DEMO

    #include <stdio.h>
    #include <stdlib.h>
     
    typedef struct node {
    	int data;
    	struct node *next;
    }Node ,*PNode;
     
    typedef struct stack {
    	PNode pTop;
    	PNode pBot;
    }Stack, *PStack;
     
    void init(PStack pS)
    {
    	pS->pTop = pS->pBot = (PNode)malloc(sizeof(Node));
    	pS->pBot->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 != pS->pBot) {
    		printf("%d ", p->data);
    		p = p->next;
    	}
    	printf("
    ");
    }
     
    void pop(PStack pS)
    {
    	if (pS->pTop != NULL) {
    		if (pS->pTop == pS->pBot) {
    			printf("已到栈底
    ");
    			return;
    		}
    		PNode p = pS->pTop;
    		pS->pTop = p->next;
    		free(p);
    		p = NULL;
    	}
    }
     
    void clean(PStack pS)
    {
    	PNode q = NULL;
    	while (pS->pTop != pS->pBot){
    		q = pS->pTop->next;
    		free(pS->pTop);
    		pS->pTop = q;
    	}
    }
     
    int main(void)
    {
    	Stack s;
    	init(&s);
    	push(&s, 5);
    	push(&s, 4);
    	push(&s, 3);
    	push(&s, 2);
    	push(&s, 1);
    	traverse(&s);
    	pop(&s);
    	traverse(&s);
    	clean(&s);
    	pop(&s);
    	traverse(&s);
    	system("pause");
    	return 0;
    }
    

    相关文章

    1. stack的常见用法
    2. java集合容器之Stack
    3. 数据结构之栈(C语言版)
    4. Java 栈 stack方法总结
    5. Java Stack 类
  • 相关阅读:
    java复习基础篇——反射
    java复习基础篇——Mysql数据库
    java复习基础篇——网络协议
    java复习基础篇——类型转换
    Full Source下载(IE扩展)
    [原]JS俄罗斯方块
    swt api和demo
    W3CSchool.chm
    一个C#写的RSS
    [原]JS Eval参数单引号问题
  • 原文地址:https://www.cnblogs.com/melodyjerry/p/12877535.html
Copyright © 2011-2022 走看看