您的位置:首页 > 其它

2.2.3 堆栈的链式存储实现

2017-11-05 15:53 323 查看
#include<stdio.h>
#include<stdlib.h>

typedef int ElementType;
typedef struct SNode *Stack;
struct SNode {
ElementType Data;
struct SNode *Next;
};
//构建一个堆栈的头结点返回指针
//通过链表不断地申请不断地往里插,不存在数组满不满的问题
Stack CreatStack() {
Stack S;
S = (Stack)malloc(sizeof(struct SNode));
S->Next = NULL;
return S;
}
//判断函数是否为空,空则返回1
int IsEmenty(Stack S) {
return(S->Next == NULL);
}
//将元素item插入堆栈S
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;
}
//删除并返回堆栈S的栈顶元素
ElementType Pop(Stack S) {
struct SNode *FirstCell;
ElementType TopElem;
if (IsEmenty(S)) {//要先考虑链表空不空
printf("堆栈空!\n");
return NULL;
}
else {
FirstCell = S->Next;
S->Next = FirstCell->Next;
TopElem = FirstCell->Data;
free(FirstCell);
return TopElem;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  链表 指针