首页 > 代码库 > 【数据结构第二周】堆栈知识点整理
【数据结构第二周】堆栈知识点整理
堆栈(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; } }
【数据结构第二周】堆栈知识点整理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。