看到有个人发帖询问栈的问题.
这个是代码!
#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;
}
----------------解决方案--------------------------------------------------------
不过谁能告诉我这个问题:
请输入字符个数 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];最好在定义之后开辟空间,即在全部的定义之后再赋值,因为有的编译器会报错.
链式栈的进栈就是做单链表的头插法,出栈是删除头结点.
----------------解决方案--------------------------------------------------------