用顺序栈实现反向打印一行数字【200分】

作者&投稿:除云 (若有异议请与网页底部的电邮联系)
这是一个链栈的出栈操作,但是出栈的数变成了一串数字,求大神帮忙~

void Push(lnode *l,int e)
改为
void Push(lnode *&l,int e)

即可,

原因C++是通过函数实参指针无法改变指针的指向,必须用引用

方法如下:

先建立两个数组:a[n];b[n].a[n]代表对一组数{1,2,3……n}进行进出栈操作,最终全部出栈能得到的出栈数组的种类数;b[n]代表同样是对一组数{1,2,3……n}进行进出栈操作,但并没有完全出栈能得到的出栈数组的种类数。对于进出栈操作时这样定义的:该过程可以被分为m次进栈和m次出栈(m<=n),而每次进栈数和出栈数不能为0.当然最后一次进展之后必然跟着一次出栈操作。

这样,对于a[n+1],对应的出栈种类数就可以分为n+1大类:

1. 最后一次进栈的是n+1号元素,下分两小类:(1)最后一次进栈时栈里已无被压元素,也就是前n号元素已被清空了。这样最后一次出栈只能把n+1号元素排出去。对应出栈种类数为a[n]。(2)最后一次进栈时栈里还有被压元素,这样最后一次出栈只能把n+1号元素以及剩余元素全部排出去。对应出栈种类数为b[n]。

2. 最后一次进栈的是n,n+1号元素,下分两小类:(1)最后一次进栈时栈里已无被压元素,也就是前n-1号元素已被清空了。这样最后一次出栈只能把n+1,n号元素排出去。对应出栈种类数为a[n-1]。(2)最后一次进栈时栈里还有被压元素,这样最后一次出栈只能把n+1,n号元素以及剩余元素全部排出去。对应出栈种类数为b[n-1]。

#include <stdio.h>

#include <stdlib.h>

#define MAX 5

typedef struct 

{

 int data[MAX];

 int top;

}Stack;

void initStack(Stack *stackNode);

void push(Stack *stackNode,int x);

int pop(Stack *stackNode);

int empty(Stack *stackNode);

int main(void)

{

 Stack stackNode;

 int x;

 initStack(&stackNode);

 printf("input the number ,-1 to end:
");

 scanf("%d",&x);

 while (x != -1)

 {

  push(&stackNode,x);

  scanf("%d",&x);

 }

 

 while (empty(&stackNode) == 0)

 {

  x = pop(&stackNode);

  printf("The number is %d
",x);

 }

 return 0;

}

void initStack(Stack *stackNode)

{

 stackNode->top = (int)malloc(sizeof(Stack));

 stackNode->top = -1;

}

void push(Stack *stackNode,int x)

{

 if (stackNode->top == MAX - 1)

 {

  printf("The stack is full!
");

 } 

 else

 {

  stackNode->top++;

  stackNode->data[stackNode->top] = x;

 }

}

int pop(Stack *stackNode)

{

 int x;

 if (empty(stackNode))

 {

  printf("The stack is empty!
");

  return 0;

 } 

 else

 {

  x = stackNode->data[stackNode->top];

  stackNode->top--;

  return x;

 }

}

int empty(Stack *stackNode)

{

 if (stackNode->top == -1)

 return 1;

 else

  return 0;

}

嘿嘿,运行结果这样对吗?



老大,以后用指针传参数要注意了
InitStack从内存申请了一片内存没错,内存地址却赋给了InitStack的参数stackNode,这个变量在程序退出后就销毁了。。。。
而main函数里的那个stackNode根本没有发生变化,这个stackNode没有经过初始化指到了内存的雷区里了。正确的做法直接在main中初始化,或者提供一对函数GetStack和ReleaseStack,GetStack把分配的内存初始化后返回,ReleaseStack把不用的Stack释放掉

Stack* GetStack()
{
Stack *p = malloc(...);
p->top = ...
return p;
}

void ReleaseStack(Stack *p)
{
free(p);
}

最好ReleaseStack的时候像这样
Release(stack);//这里没有改变stack的值,而是把stack所指的内存释放了
stack = NULL;//这里把stack清空,防止后面使用时出错

建议分清传值调用和传址调用的不同。传址调用一定会像这样
func(¶m);
这样param的值才可能改变,另外建议LZ搜一搜 高质量C/C++编程

令 强烈要求再加100 呵呵~~~~~

#include <stdio.h>
#include <stdlib.h>
#define MAX 5
typedef struct
{
int data[MAX];
int top;
}Stack;
void initStack(Stack *stackNode);
void push(Stack *stackNode,int x);
int pop(Stack *stackNode);
int empty(Stack *stackNode);
int main(void)
{
Stack stackNode;
int x;
initStack(&stackNode);
printf("input the number ,-1 to end:\n");
scanf("%d",&x);
while (x != -1)
{
push(&stackNode,x);
scanf("%d",&x);
}

while (empty(&stackNode) == 0)
{
x = pop(&stackNode);
printf("The number is %d\n",x);
}
return 0;
}
void initStack(Stack *stackNode)
{
stackNode->top = -1;
}

void push(Stack *stackNode,int x)
{
if (stackNode->top == MAX - 1)
{
printf("The stack is full!\n");
}
else
{
stackNode->top++;
stackNode->data[stackNode->top] = x;
}
}

int pop(Stack *stackNode)
{
int x;
if (empty(stackNode))
{
printf("The stack is empty!\n");
return 0;
}
else
{
x = stackNode->data[stackNode->top];
stackNode->top--;
return x;
}
}

int empty(Stack *stackNode)
{
if (stackNode->top == -1)
return 1;
else
return 0;
}


求知Photoshop、CORELDRW、Illustrator 有的快捷键
将选定对象按照对象的堆栈顺序放置到向前一个位置 【Ctrl】+【PageUp】 使用“超微调”因子向上微调对象 【Shift】+【↑】 向上微调对象 【↑】 使用“细微调”因子向上微调对象 【Ctrl】+【↑】 使用“超微调”因子向下微调对象 【Shift】+【↓】 向下微调对象 【↓】 使用“细微调”因子向下微调对象 【Ctrl...

谁知道平面设计(COREDRAW)和图像处理(PHOTOSHOP)软件里面的快捷键有哪些...
将选定对象按照对象的堆栈顺序放置到向后一个位置 【Ctrl】+【PageDown】 将选定对象按照对象的堆栈顺序放置到向前一个位置 【Ctrl】+【PageUp】 使用“超微调”因子向上微调对象 【Shift】+【↑】 向上微调对象 【↑】 使用“细微调”因子向上微调对象 【Ctrl】+【↑】 使用“超微调”因子向下微调对象 【Shift...

请问那位帅G亮M有Photoshop CS\\CorelDRAW 9的快捷键
将选定对象按照对象的堆栈顺序放置到向前一个位置 【Ctrl】+【PageUp】使用“超微调”因子向上微调对象 【Shift】+【↑】向上微调对象 【↑】使用“细微调”因子向上微调对象 【Ctrl】+【↑】使用“超微调”因子向下微调对象 【Shift】+【↓】向下微调对象 【↓】使用“细微调”因子向下微调对象 【Ctrl】+【↓】...

天宁区18685443236: 用顺序栈将输入的一行字符按相反的顺序输出 -
独孤翟骨筋: #include int main() { char s[100]; int i; printf("input one line chars:\n"); gets(s); printf("%s\n",s); // 顺序输出 for (i=strlen(s)-1;i>=0;i--)printf("%c",s[i]); //逆序输出 return 0; }

天宁区18685443236: 用c++编程,声明一个栈类,使用栈操作实现将输入的字符串反向输出的功能. -
独孤翟骨筋: #include<iostream> #include<stack> using namespace std; stack<char> sts; void main() { char i,temp; for(i=65;i<70;i++) { sts.push(i);//进栈 cout<<i<<" "; } cout<<endl; for(i=65;i<70;i++) { temp=sts.top();//取栈顶元素 sts.pop();//出栈 cout<<temp<<" "; } cout<<endl; }

天宁区18685443236: 用栈实现:将从键盘输入的字符序列逆置输出(希望具体编程) -
独孤翟骨筋: #include<iostream.h> void main() {int x,y,a,b,c;cout<<"请输入一个三位数:";cin>>x;if ((x<100)||(x>999)){cout<<"error!";}c=x%10;b=x%100;b=b/10;a=x/100;y=100*c+10*b+a;if(c!=0){cout<<"反向输出结果为:"<<y<<endl;}else{cout<<"反向输出结果为:"<<"0"<<y<<endl;} }

天宁区18685443236: 利用栈设计算法,从键盘上输入一批整数,然后按照相反的次序打印出来 -
独孤翟骨筋: 先new一个空间成为数组 总是先stack.push 最后cout

天宁区18685443236: 用顺序栈实现字符串的反向输出(字符串无长度限制,用C语言编写) -
独孤翟骨筋: 后进先出,入栈,完了出栈输出.

天宁区18685443236: 急:在键盘上输入20个字符,然后用与输入字符的先后相反的顺序在屏幕上显示出来(可使用堆栈实现)
独孤翟骨筋: ;本程序功能为 DATA SEGMENT ;用DB、DW、DD定义的变量和数据都放在此数据段, DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE START: MOV AX,DATA MOV DS,AX ;进行DS段寄存器装填,不能少 MOV CX,20 ...

天宁区18685443236: 利用递归函数调用方式,将所输入的一行字符,以相反顺序打印出来.(不能用数组) -
独孤翟骨筋: #include "stdio.h" void fun() { char c; if ((c=getchar())!='\n') fun(); putchar(c); } void main() { fun(); printf("\n"); }

天宁区18685443236: 用C语言如何编写"键盘输入一个多位数,然后倒序输出" -
独孤翟骨筋: 可以将输入的多位数顺序存放到一个数组中,之后逆序输出即可. 具体的实现方法可以参考如下程序: #include<stdio.h> #include<string.h> void main() {char num[20];int i;printf("输入一个多位数:")scanf("%s", num); // 将多位数作为一个字符串的形式一次性输入,保存在num数组中// 将数组num中的字符逆序输出,即实现多位数的倒序输出for(i=strlen(num)-1; i>=0; i--)printf("%c", num[i]); }

天宁区18685443236: C语言 逆向输出数字 -
独孤翟骨筋: #include "stdio.h" int main() { int n,i,j,a; scanf("%d",&n); if(n%2==1)//如果输入的是奇数 {for(i=0;i<4;i++) //输出是4行{for(j=0;j<=i;j++) //每行输出i+1个数{printf("%d",n);if(++n==10) n=1;//输出9后,下一个是1}printf("\n");//输出...

天宁区18685443236: 利用栈实现逆序打印单链表中的各个结点的值(vc++)急求!!! -
独孤翟骨筋: 你好!给你写了下 你看看是不是你想要的效果 下面有运行结果 注意: 该内容仅供参考 呵呵 第一题:# include <stdio.h># include <malloc.h># include <stdlib.h> typedef struct Node { char data;//数据域 struct Node * pNext;//指针域 }NODE,* ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网