念写一个栈头文件,不知道为何在测试程序出现系统崩溃,实现不了
想写一个栈头文件,不知道为何在测试程序出现系统崩溃,实现不了。
Stack.h
#ifndef Stack_H
#define Stack_H
typedef int Item;
typedef struct node *PNode;
/*定义结点类型*/
typedef struct node
{
Item data;
PNode Last; /*指向上个结点*/
PNode Next; /*指向下个结点*/
}Node;
/*定义栈类型*/
typedef struct stack
{
PNode top; /*栈顶*/
int size; /*栈的大小*/
}Stack;
Stack *InitStack(); /*建立一个空栈*/
void DestroyStack(Stack *ps); /*销毁一个栈*/
void ClearStack(Stack *ps); /*清空一个栈*/
int IsEmpty(Stack *ps); /*判断栈是否为空*/
Item GetTop(Stack *ps,Item *pitem); /*得到栈顶元素,并赋给pitem*/
Stack Push(Stack *ps,Item item); /*使元素入栈*/
Stack Pop(Stack *ps,Item *pitem); /*删除栈顶,栈顶元素给pitem*/
#endif
Stack.c
#include"Stack.h"
#include<malloc.h>
#include<stdlib.h>
Stack *InitStack()
{
Stack *ps;
ps=(Stack *)malloc(sizeof(Stack)); /*开辟一个Stack大小的空间,想问这个stack大小的空间是不是包括PNode结构体大小的空间加上一个int空间*/
if(ps != NULL){ /*如果开辟空间成功*/
ps->top->date = 0;
ps->top->Next = NULL;
ps->top->Last = NULL;
size = 0;
return ps;
}
else
exit(1);
}
void DestoryStack(Stack *ps)
{
if(IsEmpty(ps) != 1)
ClearStack(ps);
free(ps);
}
void ClearStack(Stack *ps)
{
while(IsEmpty(ps) != 1)
Pop(ps,NULL);
}
int IsEmpty(Stack *ps)
{
if(ps->size == 0)
return 1;
else
return 0;
}
PNode GetTop(Stack *ps,Item *pitem)
{
if(IsEmpty(ps) != 1 && pitem != NULL)
*pitem=ps->top->Item;
return ps->top;
}
PNode Push(Stack *ps,Item item)
{
PNode pnode;
pnode = (PNode)malloc(sizeof(Node)); /*否则开辟一个新的结点*/
pnode->Item = item; /*把元素赋给pnode*/
ps->top->Next = pnode; /*使栈顶指向新结点*/
pnode->Last=ps->top; /*使新结点的指向栈顶*/
Stack.h
#ifndef Stack_H
#define Stack_H
typedef int Item;
typedef struct node *PNode;
/*定义结点类型*/
typedef struct node
{
Item data;
PNode Last; /*指向上个结点*/
PNode Next; /*指向下个结点*/
}Node;
/*定义栈类型*/
typedef struct stack
{
PNode top; /*栈顶*/
int size; /*栈的大小*/
}Stack;
Stack *InitStack(); /*建立一个空栈*/
void DestroyStack(Stack *ps); /*销毁一个栈*/
void ClearStack(Stack *ps); /*清空一个栈*/
int IsEmpty(Stack *ps); /*判断栈是否为空*/
Item GetTop(Stack *ps,Item *pitem); /*得到栈顶元素,并赋给pitem*/
Stack Push(Stack *ps,Item item); /*使元素入栈*/
Stack Pop(Stack *ps,Item *pitem); /*删除栈顶,栈顶元素给pitem*/
#endif
Stack.c
#include"Stack.h"
#include<malloc.h>
#include<stdlib.h>
Stack *InitStack()
{
Stack *ps;
ps=(Stack *)malloc(sizeof(Stack)); /*开辟一个Stack大小的空间,想问这个stack大小的空间是不是包括PNode结构体大小的空间加上一个int空间*/
if(ps != NULL){ /*如果开辟空间成功*/
ps->top->date = 0;
ps->top->Next = NULL;
ps->top->Last = NULL;
size = 0;
return ps;
}
else
exit(1);
}
void DestoryStack(Stack *ps)
{
if(IsEmpty(ps) != 1)
ClearStack(ps);
free(ps);
}
void ClearStack(Stack *ps)
{
while(IsEmpty(ps) != 1)
Pop(ps,NULL);
}
int IsEmpty(Stack *ps)
{
if(ps->size == 0)
return 1;
else
return 0;
}
PNode GetTop(Stack *ps,Item *pitem)
{
if(IsEmpty(ps) != 1 && pitem != NULL)
*pitem=ps->top->Item;
return ps->top;
}
PNode Push(Stack *ps,Item item)
{
PNode pnode;
pnode = (PNode)malloc(sizeof(Node)); /*否则开辟一个新的结点*/
pnode->Item = item; /*把元素赋给pnode*/
ps->top->Next = pnode; /*使栈顶指向新结点*/
pnode->Last=ps->top; /*使新结点的指向栈顶*/