C语言栈中怎么删除最小值,C语言 清除栈中的所有元素ClearStack(struct SqStack * MyStack)...

匿名用户

1级

2019-05-24 回答

#include 

#include 

#include 

#define elemType int/* 链栈元素数据类型 */

#define SNODE_SIZE sizeof (struct sNode)/* 链栈结点空间大小 */

#define status int/* 状态型变量 */

#define OVERFLOW -1/* 内存溢出状态码 */

#define ERROR 0/* 错误状态码 */

#define OK 1/* 正确状态码 */

/* 链栈结点存储结构 */

typedef struct sNode {

elemType data;

struct sNode *next;

} sNode, *sNodePtr;

/* 链栈存储结构 */

typedef struct linkStack {

sNodePtr top; /* 栈顶指针 */

} linkStack;

/* 初始化 */

/* 操作结果:构造一个带头结点的空链栈S */

void initStack (linkStack *S) {

S->top = (sNodePtr) malloc (SNODE_SIZE); /* 产生头结点,栈顶指针指向此头结点 */

if (!S->top) /* 内存分配失败 */

exit (OVERFLOW);

S->top->next = NULL;

}

/* 销毁 */

/* 初始条件:链栈S已存在。操作结果:销毁链栈S */

void destroyStack (linkStack *S) {

sNodePtr p, q;

p = S->top; /* p指向S的头结点 */

while (p) {

q = p->next; /* q指向p的下一个结点 */

free (p); /* 回收p指向的结点 */

p = q; /* p移动到下一个结点 */

} /* 直到没有下一个结点 */

}

/* 清空 */

/* 初始条件:链栈S已存在。操作结果:将S重置为空栈 */

void clearStack (linkStack *S) {

sNodePtr p, q;

p = S->top->next; /* p指向栈的第一个结点 */

while (p) {

q = p->next; /* q指向p的下一个结点 */

free (p); /* 回收p指向的结点 */

p = q; /* p移动到下一个结点 */

}  /* 直到没有下一个结点 */

S->top->next = NULL;

}

/* 判断链栈是否为空 */

/* 初始条件:链栈S已存在。操作结果:若S为空链栈,则返回TRUE,否则返回FALSE */

status stackIsEmpty (linkStack *S) {

return S->top->next == NULL;

}

/* 入栈 */

/* 操作结果:在S的栈顶插入新的元素e */

status push (linkStack *S, elemType e) {

sNodePtr p;

p = (sNodePtr) malloc (SNODE_SIZE); /* 产生新结点 */

if (!p) /* 内存分配失败 */

exit (OVERFLOW);

p->data = e;

p->next = S->top->next; /* 将新结点链接到原栈顶 */

S->top->next = p; /* 栈顶指向新结点 */

}

/* 打印栈内容 */

/* 初始条件:链栈S已存在。操作结果:当栈不为空时,打印栈内容并返回OK,否则返回ERROR */

status printStack (linkStack *S) {

sNodePtr p;

if (stackIsEmpty (S)) {

puts ("The stack is empty! ");

return ERROR;

}

p = S->top->next;

while (p) {

printf ("%d\t", p->data);

p = p->next;

}

putchar ('\n');

return OK;

}

int main (void) {

linkStack S;

elemType e;

elemType a, b, c, d;

a = 1; b = 2; c = 3; d = 4;

initStack (&S);

push (&S, a);

push (&S, b);

push (&S, c);

push (&S, d);

printf ("S:\t");

printStack (&S);

putchar ('\n');

puts ("Clear the stack");

clearStack (&S);

printf ("S:\t");

printStack (&S);

destroyStack (&S);

getch (); /* 屏幕暂留 */

return 0;

}

069bed1a954b931aaeb5e1eca5b92c62.png

如有问题,点击头像联系我

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值