栈的c程序

栈的c程序,第1张

#include <stdio.h>

#include <颤颂stdlib.h>

#define STACK_INIT_SIZE 10 /* 存储空间初始分配量 */

#define STACKINCREMENT 2 /* 存储空间分配增量 */

typedef struct SqStack

{

SElemType *base/* 在栈构造之前和销毁之后,base的值为NULL */

SElemType *top/* 栈顶指针 */

int stacksize/* 当前已分配的存储空间,以元素为单位 */

}SqStack/* 顺序栈 */

Status InitStack(SqStack *S)

{ /* 构造一个空栈S */

(*S).base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType))

if(!(*S).base)

exit(OVERFLOW)/* 存储分配失败 */

(*S).top=(*S).base

(*S).stacksize=STACK_INIT_SIZE

return OK

}

Status DestroyStack(SqStack *S)

{ /* 销毁栈S,S不再存在 */

free((*S).base)

(*S).base=NULL

(*S).top=NULL

(*S).stacksize=0

return OK

}

Status ClearStack(SqStack *S)

{ /* 把S置为空栈 */

(*S).top=(*S).base

return OK

}

Status StackEmpty(SqStack S)

{ /* 若栈S为空栈,则返回TRUE,否则返回FALSE */

if(S.top==S.base)

return TRUE

else

return FALSE

}

int StackLength(SqStack S)

{ /* 返回S的元素个数,即栈的长度 */

return S.top-S.base

}

Status GetTop(SqStack S,SElemType *e)

{ /* 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR */

if(S.top>S.base)

{

*e=*(S.top-1)

return OK

}

else

return ERROR

}

Status Push(SqStack *S,SElemType e)

{ /* 插入元素e为新的栈顶元素 */

if((*S).top-(*S).base>=(*S).stacksize) /* 栈满,追加存储空键侍间 */

{

(*S).base=(SElemType *)realloc((*S).base,((*S).stacksize+STACKINCREMENT)*sizeof(SElemType))

if(!(*S).base)

exit(OVERFLOW)/* 存储分配失败 */

(*S).top=(*S).base+(*S).stacksize

(*S).stacksize+=STACKINCREMENT

}

*((*S).top)++=e

return OK

}

Status Pop(SqStack *S,SElemType *e)

{ /* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */

if((*S).top==(*S).base)

return ERROR

*e=*--(*S).top

return OK

}

Status StackTraverse(SqStack S,Status(*visit)(SElemType))

{ /* 从栈底到栈顶依次对栈中每个元素调用函茄亮郑数visit()。 */

/* 一旦visit()失败,则 *** 作失败 */

while(S.top>S.base)

visit(*S.base++)

printf("\n")

return OK

}

#include <stdio.h>

#include <stdlib.h>缺物

#define MAX 1024///栈使用数组模拟,MAX是最大元素个数

typedef int DataType ///数据域使用整形

typedef struct _stack

{

DataType data[MAX]//悄扮高/存放数据

int top ///栈顶指针

}stack

///初始化

int initStack(stack (*s))

{

return emptyStack(s)

}

///数据压栈,成功返回1,失败返回0

int push(stack (*s), DataType d)

{

if ((*s).top >= MAX - 1) //栈已满

{

printf("栈已满,不能压栈\n")

return 0

}

//数据压栈

(*s).top++

(*s).data[(*s).top] = d

return 1

}

///数据出栈,成功返回1,d指向的区启尺域存储d出的数据,失败返回0

int pop(stack (*s), DataType *d)

{

if ((*s).top <= -1)

{

printf("栈为空,不能出栈\n")

return 0

}

//出栈

*d = (*s).data[(*s).top]

(*s).top--

return 1

}

///清空栈

int emptyStack(stack (*s))

{

(*s).top = -1

return 1

}

int main(int argc, char** argv)

{

stack s

int i, d

initStack(&s)

//压栈

for (i = 0i <1025i++)

{

push(&s, i)

}

//清空

emptyStack(&s)

for (i = 0i <10i++)

{

push(&s, i)

}

//出栈

for (i = 0i <11i++)

{

pop(&s, &d)

printf("%d\n", d)

}

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12359164.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存