A. 用c语言实现栈的操作,包括创建空栈,PUSH,和POP。用标准C,就是能在TC上运行的。
#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef char SElemtype;
typedef struct
{
SElemtype *base;
SElemtype *top;
int stacksize;
}SqStack;
int InitStack(SqStack &S);
int Push(SqStack &S, SElemtype e);
int GetTop(SqStack S, SElemtype &e);
int Pop(SqStack &S, SElemtype &e);
int main()
{
SElemtype e, f = 0, g = 0;
int c;
SqStack S;
if (!InitStack(S))
return 0;
printf("栈已初始化好,输入一个数据入栈.\n");
scanf("%c", &e);
if (!Push(S, e))
return 0;
if (!GetTop(S, f))
return 0;
printf("栈顶元素是:%c\n", f);
if (!Pop(S, g))
return 0;
printf("栈顶元素出栈,它是:%c\n", g);
scanf("%d", &c);
return 1;
}
int InitStack(SqStack &S)
{
S.base = (SElemtype *)malloc(STACK_INIT_SIZE * sizeof (SElemtype));
if (!S.base)
return 0;
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return 1;
}
int Push(SqStack &S, SElemtype e)
{
if (S.top - S.base == S.stacksize)
{
S.base = (SElemtype *)realloc(S.base, (S.stacksize + STACKINCREMENT) * sizeof (SElemtype));
if (!S.base)
return 0;
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMENT;
}
*S.top++ = e;
return 1;
}
int GetTop(SqStack S, SElemtype &e)
{
if (S.top == S.base)
return 0;
e = *(S.top - 1);
return 1;
}
int Pop(SqStack &S, SElemtype &e)
{
if (S.top == S.base)
return 0;
e = *--S.top;
return 1;
}
我学这本书时写的,刚好给你。
针对补充问题:
&不是伪代码,是C++的传引用,你看的那本书上都是这样用的。
楼上的顺序栈实质就是一个数组。。
TC不能建C++项目吗? 不能的话你还是装个VC吧,你若听了老师的话就应该知道在这里传引用是什么意思,且看下面:
int InitStack(SqStack &S);
int Push(SqStack &S, SElemtype e);
int GetTop(SqStack S, SElemtype &e);
int Pop(SqStack &S, SElemtype &e);
有没有发现GetTop()的参数没有使用&S,因为它对S只读,不改变S。
如果不使用传引用的话,那么InitStack(),Push()等将要返回一个S,若要保存还要把它赋给另一个SqStack类型的变量S1,这样做浪费时间还浪费空间,且之前的S也就没用了,如果反复地调用Push()的话,这样的浪费可想而知。
所以,为了节省时间跟空间,以及按大多数情况下的需要,我们还是得始终只用一个S保存我们要的数据。
至于传引用是什么意思,跟指针有点像,你若不想翻书就再补充问题吧。。
B. “c语言”中,“pop函数”和“push函数”的作用分别是什么
这个算是数据结构的内容讲解的是一个叫做栈类型的数据结构,这个数据结构的特点就是后进先出--最后放进去的数据最先拿出来。pop函数就是拿出数据的操作,push是放入是数据的操作。
C. 怎样用C语言写出对栈进行的五种运算:push()、pop()、top()、empty()、makempty()
这是我用链表写的:
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int x;
struct node *next;
}Node;
typedef struct stack
{
Node *top;
}Stack;
void InitStack(Stack *s)
{
s->top=NULL;
}
int IsEmpty(Stack *s)
{
if(s->top==NULL)
return 1;
else
return 0;
}
void PushStack(Stack *s,int x)
{
Node *p;
p=(Node*)malloc(sizeof(Node));
p->x=x;
// p->next=NULL;
p->next=s->top;
s->top=p;
}
int PopStack(Stack *s)
{
int data;
Node *p;
p=(Node *)malloc(sizeof(Node));
if(IsEmpty(s))
{
printf("the stack is empty!\n");
free(p);
return -1;
}
else
{
p=s->top;
data=p->x;
s->top=p->next;
free(p);
return data;
}
}
int main (int argc,char **argv)
{
int i;
Stack s;
InitStack(&s);
for(i=0;i<1000;i++)
{
PushStack(&s,i);
}
for(i=0;i<1000;i++)
{
printf("%d\n",PopStack(&s));
}
}