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;
        } 
    } 
  • 相关阅读:
    团队二阶段冲刺个人工作总结9
    团队二阶段冲刺个人工作总结8
    团队二阶段冲刺个人工作总结7
    团队二阶段冲刺个人工作总结6
    PSP总结报告
    第十三周例行报告
    对团队成员公开感谢博客
    附加作业 软件工程原则的应用实例分析
    第十二周例行报告
    第十一周例行报告
  • 原文地址:https://www.cnblogs.com/acmsummer/p/4213960.html
Copyright © 2011-2022 走看看