标题:栈实现
只看楼主
美眉
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2006-8-3
 问题点数:0 回复次数:8 
栈实现

看到有个人发帖询问栈的问题.
这个是代码!
#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 
2006-08-07 14:37
美眉
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2006-8-3
得分:0 

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

入栈顺序:
asdf
输出fdsa

Press any key to continue



2006-08-07 14:39
mikewolf
Rank: 1
等 级:新手上路
帖 子:175
专家分:0
注 册:2004-7-3
得分:0 

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

2006-08-07 14:53
美眉
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2006-8-3
得分:0 

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


2006-08-07 15:06
jyycom
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2006-5-18
得分: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 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编辑过]


重新学习C语言!
2006-08-07 17:30
美眉
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2006-8-3
得分: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);
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;
}


2006-08-07 18:23
美眉
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2006-8-3
得分:0 

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


2006-08-07 18:24
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 
用gets(char *)可以解决这样的问题.
要输入字符要注意前面的换行符等特殊字符是否被清除(否则,该字符则留在缓冲区内,从而影响下次的字符输入.)

倚天照海花无数,流水高山心自知。
2006-08-07 19:30
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 
1.用一个带头结点的做顶结点,会好一点,至少不要全局变量.
2.printf("请输入%d个字符:\n",n);像你那样的提示等于没有.
3.char *arr=new char[n];最好在定义之后开辟空间,即在全部的定义之后再赋值,因为有的编译器会报错.
链式栈的进栈就是做单链表的头插法,出栈是删除头结点.

倚天照海花无数,流水高山心自知。
2006-08-07 20:45



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-82600-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020615 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved