哥,您这栈的是仿郝斌的数据结构的栈的演示的吧...你少了一个函数,就是判断栈是否为空的函数isEmery
您对展还不是很理解呢,栈的头结点是在下面的,被pBotton指向,而 delete函数中的 p->pTop->pNext应该是它的尾节点的前一个节点的地址,而不是后一个节点的地址,它前一个节点肯定不为空了,所以你这里的判断就错了
我修改了一下您的代码;
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h> //少了这个头文件您怎么创建动态内存呢?
typedef struct Node{
int data;
struct Node *pNext;
}node,*pnode;
typedef struct stack{ //少了栈的类型名称,虽然您定义了宏,但这个最好写上;
pnode pBotton;
pnode pTop;
}Stack,*pStack;
void init(pStack p)
{
p->pBotton=(pnode)malloc(sizeof(node));
p->pTop=p->pBotton;
p->pBotton->pNext=NULL;
}
bool push(pStack p,int val)
{
pnode ps=(pnode)malloc(sizeof(node));
ps->data=val;
ps->pNext=p->pTop;
p->pTop=ps;
return true;
}
void traver(pStack p)
{
pnode q=p->pTop;
while(q->pNext!=NULL)
{
printf("%d",q->data);
q=q->pNext;
}
}
void isEmerty(pStack p){
if(p->pTop==p->pBotton){ /*假如p->pTop和p->pBotton都指向同一结点,即指向栈底的时候,表示这个栈为空栈,一个元素也没有*/
return true;
}else{
return false;
}
}
bool delete(pStack p) //这里开始出错了。。。
{
if(isEmerty (p))
return false;
else
{
pnode q=p->pTop;
p->pTop=q->pNext;
free(q);
q=NULL;
return true;
}
}
int main()
{
pStack s;
s=(pStack)malloc(sizeof(Stack));
init(s);
push(s,2);
push(s,4);
push(s,7);
push(s,8);
traver(s);
printf("\n");
delete(s);
traver(s);
return 0;
}
|