栈的链式实现例子
#ifndef STACK_H_INCLUDED #define STACK_H_INCLUDED #include "ds.h" //for Status,OK ... #ifndef ElemType #define ElemType int /* 数据元素类型默认为 int */ #define ELEMTYPE_TAG #endif /////////////////////////////////////////////////////////// //链栈的存储结构定义 typedef struct LNode { ElemType data; struct LNode *next; } LNode, *LinkList; typedef LinkList LinkStack; //链栈类型 /////////////////////////////////////////////////////////// //链栈的基本操作声明 //构造一个空栈S Status InitStack(LinkStack &S); //销毁栈S Status DestroyStack(LinkStack &S); //将栈S清空 Status ClearStack(LinkStack &S); //若栈S为空返回TRUE,否则FALSE Status StackEmpty(LinkStack S); //返回栈S中的元素个数 int StackLength(LinkStack S); //用e返回栈顶元素 // 前提:栈S存在且不空 Status GetTop(LinkStack S, ElemType &e); //元素e入栈S Status Push(LinkStack &S, ElemType e); //S出栈用e返回出栈元素 // 前提:栈S存在且不空 Status Pop(LinkStack &S, ElemType &e); /////////////////////////////////////////////////////////// //链栈的基本操作的实现 //构造一个空栈S Status InitStack(LinkStack &S) { // TODO (#1#): 构造一个空栈S,不带头结点 S=(LinkStack)malloc(sizeof(LNode)); if(!S) return ERROR; S->next=NULL; return OK; //------------------------------------- } //销毁栈S Status DestroyStack(LinkStack &S) { // TODO (#1#):销毁栈S,相当于清空栈 // http://www.bianceng.cn LinkStack p; while(S) { p=S->next; free(S); S=p; } return OK; //------------------------------------- } //将栈S清空 Status ClearStack(LinkStack &S) { // TODO (#1#): 将栈S清空,释放所有结点 LinkStack p,q; p=S->next; while(p) { q=p->next; free(p); p=q; } S->next=NULL; return OK; //------------------------------------- } //若栈S为空返回TRUE,否则FALSE Status StackEmpty(LinkStack S) { // TODO (#1#): 若栈S为空返回TRUE,否则FALSE if(S==NULL) return 1; else return 0; //------------------------------------- } //返回栈S中的元素个数 int StackLength(LinkStack S) { // TODO (#1#): 返回栈S中的元素个数 LinkStack p; int x=0; p=S->next; while(p!=NULL) { x++; pp=p->next; } return x; //------------------------------------- } //用e返回栈顶元素 // 前提:栈S存在且不空 Status GetTop(LinkStack S, ElemType &e) { // TODO (#1#):若栈S不空,则用e返回栈顶元素 if(S==NULL) exit(OVERFLOW); e=S->data; return OK; //------------------------------------- } //元素e入栈S Status Push(LinkStack &S, ElemType e) { // TODO (#1#): 插入元素e作为新的栈顶 LinkStack p; p=(LinkStack)malloc(sizeof(LNode)); if(!p)exit(OVERFLOW); p->data=e; p->next=NULL; p->next=S->next; S->next=p; return OK; //------------------------------------- } //S出栈用e返回出栈元素 // 前提:栈S存在且不空 Status Pop(LinkStack &S, ElemType &e) { // TODO (#1#):若栈S不空,则删除栈顶元素用e返回 if(S==NULL) return ERROR; e=S->data; SS=S->next; return OK; //------------------------------------- } #ifdef ELEMTYPE_TAG #undef ElemType #undef ELEMTYPE_TAG #endif #endif
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索栈
, return
, c++ 链栈 出错
, 链栈
, next
, null
, s7-200
, stack overflow
, 元素
, status
, todo
, 链式栈
, 带头结点
返回栈
链表实现栈、栈的链表实现、用链表实现栈、c语言用链表实现堆栈、链栈的实现,以便于您获取更多的相关知识。
时间: 2024-09-14 22:04:54