一、堆栈的抽象数据类型描述
二、堆栈的顺序存储实现
#include <stdio.h>
/*栈的顺序存储实现*/
#define MaxSize <存储元素的最大个数>
typedef struct SNode *Stack;
struct SNode{
ElementType Data[Maxsize];
int Top;
};
/*1.入栈*/
void Push(Stack PtrS, ElementType item)
{
if(PtrS->Top == MaxSize-1){
printf("堆栈满");
return;
}else{
PtrS->Data[++(PtrS->Top)] = item;
return;
}
}
/*2.出栈*/
ElementType Pop(Stack PtrS)
{
if(PtrS->Top == -1){
printf("堆栈空");
return ERROR;
}else{
return (PtrS->Data[(PtrS->Top)--]);
}
}
三、堆栈的链式存储实现
#include <stdio.h>
/*堆栈的链式存储实现*/
typedef struct SNode *Stack;
struct SNode{
ElementType Data;
struct SNode *Next;
};
/*1.创建新的堆栈*/
Stack CreateStack()
{
Stack S;
S = (Stack)malloc(sizeof(struct SNode));
S->Next = NULL;
return S;
}
int IsEmpty(Stack S)
{
/*判断堆栈S是否为空,若为空则返回整数1,否则返回0*/
return (S->Next == NULL);
}
/*2.插入一个节点到堆栈*/
void Push(ElementType item, Stack S)
{
struct SNode *TmpCell;
TmpCell = (struct SNode *)malloc(sizeof(struct Snode));
TmpCell->Data = item;
TmpCell->Next = S->Next;
S->Next = TmpCell;
}
/*3.删除一个节点并返回栈顶元素*/
ElementType Pop(Stack S)
{
struct SNode *FirstCell;
ElementType TopElem;
if(IsEmpty(s)){
printf("堆栈空");
return NULL;
}else{
FirstCell = S->Next;
S->Next = FirstCell->Next;
TopElem = FirstCell ->Element;
free(FirstCell);
return TopElem;
}
}