堆栈的顺序存储c语言代码,(C语言)堆栈顺序存储源码(包含测试)

本实验来源于姥姥主编《数据结构(第2版)》.

内容也没有很难,就是按照一般初学者听课的视角去敲代码,千里之行始于足下。

//堆栈的顺序存储

#include

#include

#define ERROR -1

typedef int Position;

typedef struct SNode *PtrToStack;

typedef int ElementType;

struct SNode{

ElementType *Data;

Position Top;

int MaxSize;

};

typedef PtrToStack Stack;

Stack CreateStack(int MaxSize);//生成空堆栈,其最大长度为Maxsize

int IsFull(Stack S);//判断堆栈S是否已满

int Push(Stack S,ElementType X);//将元素item压入堆栈

int IsEmpty(Stack S);//判断堆栈S是否为空

ElementType Pop(Stack S);//删除并返回栈顶元素

Stack CreateStack(int MaxSize){

Stack S=(Stack)malloc(sizeof(struct SNode));

S->Data = (ElementType *)malloc(MaxSize*sizeof(ElementType));

S->Top = -1;

S->MaxSize = MaxSize;

return S;

}

int IsFull(Stack S){

return (S->Top==S->MaxSize-1);

}

int Push(Stack PtrS,ElementType X)

{

if(IsFull(PtrS)){

printf("堆栈满");

return ERROR;

}else{

PtrS->Data[++(PtrS->Top)] = X;

return PtrS->Data[PtrS->Top];

}

}

int IsEmpty(Stack S){

return (S->Top==-1);

}

ElementType Pop(Stack PtrS)

{

if(PtrS->Top==-1){

printf("堆栈空");

return ERROR;

}else{

return (PtrS->Data[(PtrS->Top)--]);

}

}

int main()

{

Stack S1 = CreateStack(5);;

int m,full,empty;

full = IsFull(S1);

empty = IsEmpty(S1);

if (full)

printf("Stack is Full:\n");

else

printf("Stack is not Full\n");

if (empty)

printf("Stack is Empty\n");

else

printf("Stack is not Empty\n");

m = Push(S1,1);

m = Push(S1,2);

m = Push(S1,3);

printf("%d\n",m);

full = IsFull(S1);

empty = IsEmpty(S1);

if (full)

printf("Stack is Full:\n");

else

printf("Stack is not Full\n");

if (empty)

printf("Stack is Empty\n");

else

printf("Stack is not Empty\n");

m = Pop(S1);

printf("%d\n",m);

return 0;

}

如果编码的时候,身边有纸笔的话,就更容易将代码牢牢记住了!加油,数据结构被视为计算机的老大哥!

标签:int,S1,PtrS,顺序存储,源码,printf,Top,C语言,Stack

来源: https://blog.csdn.net/m0_37149062/article/details/104864005

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值