当前位置: 代码迷 >> C语言 >> 栈实现
  详细解决方案

栈实现

热度:297   发布时间:2006-08-07 14:37:48.0
栈实现

看到有个人发帖询问栈的问题.
这个是代码!
#include<stdio.h>
#define LEN sizeof(struct sqstack)
#include<malloc.h>
struct sqstack
{
char data;
struct sqstack *top;
};
struct sqstack *st;
void push(char k)
{


struct sqstack *newst=(struct sqstack*)malloc(LEN);
newst->data=k;
newst->top=st;
st=newst;

}
char pop()
{
char value;
struct sqstack *t;
value=st->data;
t=st;
st=st->top;
free(t);
return value;
}
void main()
{


int n;
printf("请输入字符个数 n:\n");
scanf("%d",&n);

char *arr=new char[n];

printf("请输入n个字符:\n");
for(int i=0;i<n;i++)
scanf("%c",&arr[i]);

printf("\n入栈顺序:");
for( i=0;i<n;i++)
{
printf("%c",arr[i]);
push(arr[i]);
}
printf("\n");
printf("输出");
for( i=0;i<n;i++)
{printf("%c",pop());}
printf("\n");
delete arr;
}

搜索更多相关的解决方案: return  include  void  top  

----------------解决方案--------------------------------------------------------

不过谁能告诉我这个问题:
请输入字符个数 n:
5
请输入n个字符:
asdfg

入栈顺序:
asdf
输出fdsa

Press any key to continue



----------------解决方案--------------------------------------------------------

你说的是队列?
FIFO
其实和栈技术差不多啊!


----------------解决方案--------------------------------------------------------

是这个程序运行的时候
我输入5个数字!
结果只有4个数字在操作!


----------------解决方案--------------------------------------------------------

#include<stdio.h>
#define LEN sizeof(struct sqstack)
#include<malloc.h>
struct sqstack
{
char data;
struct sqstack *top;
};
struct sqstack *st;
void push(char k)
{


struct sqstack *newst=(struct sqstack*)malloc(LEN);
newst->data=k;
newst->top=st;
st=newst;

}
char pop()
{
char value;
struct sqstack *t;
value=st->data;
t=st;
st=st->top;
free(t);
return value;
}
void main()
{

int i;
int n;
printf("请输入字符个数 n:\n");
scanf("%d",&n);

char *arr=new char[n];

printf("请输入n个字符:");
getchar();//这里加个,把你的回车输入,防止进入arr数列中 或者干脆后面循环从1到n+1也可以解决

for( i=0;i<n;i++)
{
scanf("%c",&arr[i]);
}
printf("\n入栈顺序:");
for( i=0;i<n;i++)
{

printf("a[%d] is :",i) ;//这样可以看出你把数列中哪些项丢失
printf("%c\n",arr[i]);
push(arr[i]);
}
printf("\n");
printf("输出");
for( i=0;i<n;i++)
{printf("%c",pop());}
printf("\n");
delete arr;
}


[此贴子已经被作者于2006-8-7 17:32:28编辑过]


----------------解决方案--------------------------------------------------------

#include<stdio.h>
#define LEN sizeof(struct sqstack)
#include<malloc.h>
struct sqstack
{
char data;
struct sqstack *top;
};
struct sqstack *st;
void push(char k)
{


struct sqstack *newst=(struct sqstack*)malloc(LEN);
newst->data=k;
newst->top=st;
st=newst;

}
char pop()
{
char value;
struct sqstack *t;
value=st->data;
t=st;
st=st->top;
free(t);
return value;
}
void main()
{


int n;
printf("请输入字符个数 n:\n");
scanf("%d",&n);
getchar();
char *arr=new char[n];

printf("请输入n个字符:\n");

for(int i=0;i<n;i++)
scanf("%c",&arr[i]);


printf("\n入栈顺序:");

for( i=0;i<n;i++)
{
printf("%c",arr[i]);
push(arr[i]);
}
printf("\n");
printf("输出");
for( i=0;i<n;i++)
{printf("%c",pop());}
printf("\n");
delete arr;
}


----------------解决方案--------------------------------------------------------

,这样就可以了,谢谢啊!


----------------解决方案--------------------------------------------------------
用gets(char *)可以解决这样的问题.
要输入字符要注意前面的换行符等特殊字符是否被清除(否则,该字符则留在缓冲区内,从而影响下次的字符输入.)
----------------解决方案--------------------------------------------------------
1.用一个带头结点的做顶结点,会好一点,至少不要全局变量.
2.printf("请输入%d个字符:\n",n);像你那样的提示等于没有.
3.char *arr=new char[n];最好在定义之后开辟空间,即在全部的定义之后再赋值,因为有的编译器会报错.
链式栈的进栈就是做单链表的头插法,出栈是删除头结点.
----------------解决方案--------------------------------------------------------
  相关解决方案