顺序栈的基本操作

it2022-05-09  37

c语言实现顺序栈的基本操作

#include<stdlib.h> #include<stdio.h> #include<conio.h> #define INIT_SIZE 20 #define INCREMENT 10 typedef int ElemType; typedef struct { ElemType* base; ElemType* top; int StackSize; }SqStack; SqStack * Init_Stack(); int Empty_Stack(SqStack *s); void Push(SqStack *s, ElemType data); ElemType Pop(SqStack *s); void Print_Stack(SqStack *s); ElemType Get_Top(SqStack *s); int Get_Len(SqStack *s); SqStack * Init_Stack() { SqStack *s=(SqStack*)malloc(sizeof(SqStack));//为栈提供内存 s->base = (ElemType*)malloc(sizeof(ElemType)*INIT_SIZE);//为栈的内容提供内存 if (!s&&s->base)return; s->top = s->base;//栈顶=栈底 s->StackSize = INIT_SIZE; return s; } int Empty_Stack(SqStack *s)//判断空栈 { if (s->top == s->base) { return 1; } return 0; } void Push(SqStack *s,ElemType data)//入栈 { if (!s->base&&s)return; if (s->top - s->base >= INIT_SIZE) { s->base = (ElemType*)realloc(s->base, s->StackSize + sizeof(ElemType)*INCREMENT);//分配增量的空间给栈 if (!s->base)return; s->top = s->base + s->StackSize;//重新设置栈顶指针 s->StackSize += INCREMENT; } *(s->top) = data;//为栈顶指针指向的地址赋值 s->top++;//栈顶指针指向下个地址 } ElemType Pop(SqStack *s)//出栈 { if (Empty_Stack(s))return; ElemType data = *(s->top - 1); (s->top)--; return data; } void Print_Stack(SqStack *s)//打印栈 { if (Empty_Stack(s))return; ElemType *p = s->top; //定义一个用来遍历的指针 while (p != s->base) //从栈顶遍历到栈底 { printf("%d ",*(p-1)); p--; } } ElemType Get_Top(SqStack *s)//取栈顶元素 { if (Empty_Stack(s))return; ElemType data= *(s->top - 1); return data; } int Get_Len(SqStack *s) { int len=s->top-s->base; return len; } main() { SqStack *S = Init_Stack(); Push(S, 5); Push(S, 6); Push(S, 4); Push(S, 7); printf("\n栈内元素为: "); Print_Stack(S); printf("\n出栈元素为: %d ", Pop(S)); printf("\n栈内元素为: "); Print_Stack(S); printf("\n栈顶元素为:%d ",Get_Top(S)); printf("\n栈的长度为:%d ", Get_Len(S)); system("pause"); }

 

转载于:https://www.cnblogs.com/ljh-blog/p/10837587.html

相关资源:数据结构—成绩单生成器

最新回复(0)