下面建栈、进栈和退栈的算法,如何把它变成具体的c语言程序,
比如我输入任意一段字符,如“abcdefg”,然后把它存入栈中,
再从栈中一个个打印出来。
我是新手,对栈的作用都明白了,但还不知道具体怎建栈和使用它,看起来它和普通的结构类型有什么不同啊,它也是结构类型吗?还有push()这个是系统定义好的,还是需要自己定义,可以反它改成push_1()吗?
#define N 100
struct
{
datatype data[N];
int top ;/*存放栈顶元素的下标*/
} S;
void push()
{if (s.top==m-1)栈满;
else
{s.top++;
s.data[top]=x;
}
}
void Pop (S, x)
{
if(S->top==-1) /*栈为空*/
exit(0);
else
{
x=S.data[S->top];
S->top--; /*修改栈顶指针*/
}
}
/*
请输入字符串: love LOVE
EVOL evol
Press any key to continue
*/
#include <stdio.h>typedef struct stack { }STACK;
stack这个小写的和这上大写的STACK有什么区别, 大定的应是自定义的一个类型吧、那这个小 写的呢? 和上楼的相比,这两种区别用法?
stack是结构的名称,STACK是类型名,stack与struct配合,可以声明结构变量,如
struct stack a,*ps;
而STACK作为类型名,可以直接声明变量,如
STACK a[N];
请比较二者间的异同。
栈这种数据结构,可用通过一个结构体封装,也可以不用。
push这个函数可以直接用。
下面按照你说的给一个例子,就用你给出的这段代码,将这段代码保存可以直接编译运行:
#include <stdlib.h>一、struct /* a*/ /*建栈,这里不要加结构名吗,为什么可以不加,难道定义其它结构类型也可以不加吗?*/
{char data[N]; int top ;} S;
请问,你这个是用编译器写的
我用的linux gcc哈
你这里只是个例子,只声明了一个全局变量,所以可以不加
当然,一般情况下要有结构名的,这只是个特例。
另外,这个例子程序中有一个小小的bug,不知道你发现没,就是45行的strlen,尽管不影响运行
入栈出栈函数有误,按照你的例子,将“abcdefg”依次入栈,那你的datatype 的类型应该是字符,代码如下:
#include<stdio.h>