就是 把 指向结构体的 指针 压入栈里面去 不知道 怎样定义堆栈和传递参数 望您能给予帮助 谢谢。

以下是定义的堆栈
typedef struct{
int *base;
int *top;
int stacksize;
}SQSTACK;
int Push(SQSTACK &S,int e)
{
if(S.top-S.base>=S.stacksize)

{

S.base=(int*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));

if(!S.base)return error;
S.top=S.base+S.stacksize;// 申明新的基地址
S.stacksize+=STACKINCREMENT;//length

}
*S.top++=e;
return ok;
}

int Pop(SQSTACK &S,int e)
{
if(S.base==S.top)return error;
e=*(--S.top);
return e;

}
以下是前序非递归遍历
typedef struct BiTNode{

char data;
struct BiTNode *lchild;
struct BiTNode *rchild;

} BiTNode,*Bitree;

void PreOrder(Bitree T) //前序
{SQSTACK S;
Bitree p;
InitStack(S);
Push(S,T);
while(!StackEmpty(S))
{Pop(S,p);visit(p->data);
if(p->rchild!=NULL)Push(S,p->rchild);
if(p->lchild!=NULL)Push(S,p->lchild);
}}
: error C2664: 'Push' : cannot convert parameter 2 from 'struct BiTNode *' to 'int'

假设你的结构体是struct A,那么,你的栈可以用STL库中的stack类模板。定义为:
stack<struct A *> S;
进栈出栈用
S.push(结构体指针);
S.pop();
栈顶元素:
S.top()

要加入头文件
#include<stack>

using namespace std;

补充:根据你的栈的定义,里面存储的元素都是整型的,整个要改啊,比方说定义要改成:
typedef struct{
Bitree *base;
Bitree *top;
int stacksize;
}SQSTACK;

Push函数要改成:
int Push(SQSTACK &S,Bitree e)
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-11-28
注意a是push函数的局部变量,该函数执行完后,a变量将不复存在,所以返回其地址的做法是错误的。应该使用malloc动态分配内存。
#include <stdio.h>
#include <malloc.h>
#define MAXSIZE 5

typedef int datatype;
typedef struct
{
datatype stack[MAXSIZE];
int top;
}seqstack;

seqstack *push()
{

seqstack *a,*head;
a = (seqstack *)malloc(sizeof(seqstack));
datatype x;
head=a;
a->top=-1;
printf("请输入第1个数据,以0结束输入:");
a->top++;
scanf("%d",&x);

while (x!=0 && a->top<MAXSIZE-1)
{
a->stack[a->top++]=x;
printf("请输入第%d个数据,以0结束输入:",a->top+1);
scanf("%d",&x);
}
if(x!=0)
a->stack[a->top]=x;
else
a->top--;
if(a->top==-1)
return NULL;
else
return head;
}

void display()
{
/* int i; */
seqstack *push(),*p;
p=push();
if(p==NULL)
printf("该栈是一个空栈\n");
else
printf("%d\n",p->top);

}

void main()
{
display();
}
你的串号我已经记下,采纳后我会帮你制作
相似回答
大家正在搜