问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

顺序存储结构下栈的基本操作

发布网友 发布时间:2022-05-09 20:19

我来回答

1个回答

热心网友 时间:2023-10-17 12:01

/*
此程序仅供参考!
*/
# include <stdio.h>
# include <string.h>
# include <stdlib.h>

typedef struct Node
{
int data;
struct Node * pNext;
}NODE,* PNODE;

typedef struct Stack
{
PNODE pTop;
PNODE pBottom;
}STACK,* PSTACK;

void initiate(PSTACK pS);//创建一个空栈
void is_empty(PSTACK pS);//判断栈是否为空
int push(PSTACK pS);//压栈
int GetTop(PSTACK pS, int * pTop);//获取当前栈顶元素
void PrintStack(PSTACK pS);//遍历栈,不破环栈
int pop_one(PSTACK pS,int * pVal);//从栈中弹出一个元素
void Pop(PSTACK pS,int len);//遍历栈,破环栈

int main(void)
{
STACK s;

printf("创建一个空栈:......\n");
initiate(&s);

is_empty(&s);

int len = push(&s);

is_empty(&s);

int top;
top = GetTop(&s, &top);
printf("\n当前栈顶元素是%d\n",top);

printf("\n遍历栈(未破环栈)......\n");
PrintStack(&s);
is_empty(&s);

printf("\n遍历栈(破环栈)......\n");
Pop(&s,len);
is_empty(&s);

return 0;
}

void initiate(PSTACK pS)
{
pS->pTop = (PNODE)malloc(sizeof(NODE));
if (NULL == pS->pTop)
{
printf("动态内存分配失败!\n");
exit(-1);
}
else
{
pS->pBottom = pS->pTop ;
pS->pTop->pNext = NULL;
}

return;
}
int push(PSTACK pS)
{
printf("\n请输入栈的深度:\t");
int len;
scanf("%d",&len);
int i,val;
for (i=0; i<len; ++i)
{
printf("请输入第%d个元素:\t",(i+1));
scanf("%d",&val);

PNODE pNew = (PNODE)malloc(sizeof(NODE));
pNew->data = val;
pNew->pNext = pS->pTop ;
pS->pTop = pNew;
}

return len;
}
void PrintStack(PSTACK pS)
{
PNODE p = pS->pTop;
while (p != pS->pBottom)
{
printf("%5d",p->data);
p = p->pNext ;
}
printf("\n");

return;
}

void is_empty(PSTACK pS)
{
if (pS->pTop == pS->pBottom)
{
printf("\n当前栈为空!\n");
}
else
{
printf("\n当前栈不为空!\n");
}

return;
}

int pop_one(PSTACK pS,int * pVal)
{
PNODE r = pS->pTop;
*pVal = r->data ;
pS->pTop = r->pNext;
free(r);
r = NULL;

return * pVal;
}

int GetTop(PSTACK pS,int * pTop)
{
PNODE r = pS->pTop;
*pTop = r->data ;

return * pTop;
}

void Pop(PSTACK pS,int len)
{
int i,val;
for (i=0; i<len; ++i)
{
val = pop_one(pS,&val);
printf("%3d",val);
}
printf("\n");

return ;
}
/*
在vc++6.0中的输出结果是:
--------------------
创建一个空栈:......

当前栈为空!

请输入栈的深度: 5
请输入第1个元素: 1
请输入第2个元素: 2
请输入第3个元素: 3
请输入第4个元素: 4
请输入第5个元素: 5

当前栈不为空!

当前栈顶元素是5

遍历栈(未破环栈)......
5 4 3 2 1

当前栈不为空!

遍历栈(破环栈)......
5 4 3 2 1

当前栈为空!
-----------------------
*/
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
房贷和消费贷利率差别不大,但是还款金额差别挺大,都是怎么计算的... ...11月18号提现1500元、,11月25号还款1515,请问我还需要还 总金额是1515元,手续费是3.33元,怎么算的 三个小杯,两个大杯的容量一共是880毫升,小杯的容量是大杯的四分之一... ...毫升,小杯的容量是大杯的4分之1,小杯和大杯的容量各是多少毫升?(用... 怎么能知道局域网有没有人开P2P之类的限速软件,如果被限速,那么开360... 用P2P限速对方会知道吗 怎样判断是否有人使用局域网限速软件如果你在局域网内共享上网? 什么软件能查到其它电脑是否对网络限速?(例如其它电脑使用了P2P这种... 怎么让电脑版微信在线 栈的操作方式是什么? c++实现栈的基本操作 数据结构中栈的基本操作,如InitStack(&s)中用了引用,而有的却没用引用,如StackEmpty(s),求高手解释 栈的基本操作有哪些? 暗黑游戏下载 单机游戏暗黑 暗黑游戏下载. 求一款游戏(暗黑破坏神类游戏) 上海站滴滴打车到松江荣乐东路要多少钱 上海火车站滴滴打车到浦东机场多少钱 游戏暗黑破坏神 从上海火车站到上海南桥绿地铂骊酒店坐滴滴打车多少钱 单机游戏——暗黑 上海火车站北广场到上海车墩坐滴滴打车多少钱多长时间 上海南站怎样到上海客运南站。可以滴滴打车吗 oppo手机最省电模式 寒假 春联 2009年的春联 从上海站哪个出口到嘉定区新郁路乘滴滴打车? 09年的春联(带横批) 栈的基本操作【数据结构】 能在vc++6.0上通过编译的 求代码 线性表 栈和队列的基本操作 索尼85/1.8和适马85/1.4怎么选 佳能85 1.2和适马85 1.2哪个好 适马85 1.4 art 人像有没有防抖 给老板祝福语简短精辟有哪些? 老板祝酒词 祝老总的生日祝福词!!(藏头诗:祝宋旭彬生日快乐) 4位老师带40名同学去参观英雄纪念馆,怎样买票合算 如何使用EDIUS制作倒影 本家老师带40名同学去参观英雄纪念馆,怎样买票最合算票价*八元?学生四元,团体50元,十人及以上 在参观博物馆纪念馆公园等场所作为未成年人你受到过哪些特别关怀? edius怎么用mbsuite 武汉一学生参观私人博物馆失手打碎文物,目前双方达成赔偿约定了吗? 学校去纪念馆参观。一共有66人。学生人数是老师的2倍。学生有多少人? 新手适合使用EDIUS么 谁知道EDIUS4怎么使用 操作edius软件需要了解哪些要点? edius无法刻录光盘怎么办 edius刻录光盘灰色解决办法 嫦娥奔月作文六百字