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;
        } 
    } 
  • 相关阅读:
    0918作业-----所有数值未做合法性检测
    尝试安装和配置JDK,并给出安装、配置JDK的步骤
    java为什么可以跨平台执行
    字符集
    java 入门及简介
    时间轴特效
    javascript简介
    javascript while循环
    Javascript for循环
    函数豹子问题
  • 原文地址:https://www.cnblogs.com/acmsummer/p/4213960.html
Copyright © 2011-2022 走看看