zoukankan      html  css  js  c++  java
  • 【数据结构第二周】堆栈知识点整理

    堆栈(Stack):具有一定操作约束的线性表

    只在一端(栈顶,Top)做插入和删除

    1、栈的顺序存储实现

    栈的顺序存储结构通常由一个一维数组和一个记录栈顶元素位置的变量组成。

    (1)存储

    #define MaxSize <储存数据元素的最大个数>
    typedef struct 
    {
    	ElementType Data[MaxSize]
    	int Top;
    }Stack;
    

    (2)入栈

    void Push(Stack *PtrS, ElementType item)
    {
    	if (PtrS->Top == MaxSize-1)
    	{
    		printf("堆栈满");
    		return;
    	}else
    	{
    		PtrS->Data[++(PtrS->Top)] = item;
    		return;
    	}
    }
    

    (3)出栈

    ElementType Pop(Stack *PtrS)
    {
    	if (PtrS->Top == -1)
    	{
    		printf("堆栈空");
    		return ERROR;
    	}else
    	{
    		return (PtrS->Data[(PtrS->Top)--]);
    	}
    }
    

    2、堆栈的链式存储实现

    栈的链式存储结构实际上就是一个单链表,叫做链栈。

    插入和删除操作只能在栈链的栈顶进行

    栈顶指针Top应该指向链表的头结点

    (1)初始化

    typedef struct Node
    { 
    	ElementType Data;
        struct Node *Next; 
    } LinkStack;
    LinkStack *Top;
    
    LinkStack *CreateStack()
    { /* 构建一个堆栈的头结点,返回指针 */
       LinkStack *S;
       S = malloc( sizeof(struct Node ));
       S->Next = NULL;
       return S;
    }
    int IsEmpty( LinkStack *S )
    { /*判断堆栈S是否为空,若为空函数返回整数 1,否则返回0 */
       return ( S->Next == NULL );
    }

    (2)入栈

    void Push( ElementType item, LinkStack *S ) 
    { /* 将元素item压入堆栈S */
        struct Node *TmpCell;
        TmpCell = malloc( sizeof( struct Node ) ); 
        TmpCell->Element = item;
        TmpCell->Next = S->Next;
        S->Next = TmpCell;
    }

    (3)出栈

    ElementType Pop( LinkStack *S ) 
    { /* 删除并返回堆栈S的栈顶元素 */
       struct Node *FirstCell;
       ElementType TopElem;
       if( IsEmpty( S ) ) 
       {
            printf(“堆栈空”); 
            return NULL; 
       }else 
       {
            FirstCell = S->Next;
            S->Next = FirstCell->Next; 
            TopElem = FirstCell ->Element; 
            free(FirstCell);
            return TopElem;
        } 
    } 
  • 相关阅读:
    IDEA中给main方法的args传参
    spark (Java API) 在Intellij IDEA中开发并运行
    Spark在Windows下的环境搭建
    Android Studio开发第三篇版本管理Git
    Android Studio开发第二篇创建新项目
    Android Studio开发第一篇QuickStart
    AndroidのInputFillter之按字符过滤长度,一个中文当两个字符
    DownloadProvider源码解析——与Volley对比
    EGit系列第三篇——远程提交代码
    WP8.1学习系列(第二十七章)——ListView和GridView入门
  • 原文地址:https://www.cnblogs.com/acmsummer/p/4213960.html
Copyright © 2011-2022 走看看