|
1鱼币
-
- //预定义常量和类型
- //函数结果状态代码
- #include <stdio.h>
- #include<stdlib.h>
- #include <time.h>
- #include<windows.h>
- #include<math.h>
- //#include<unistd.h>
- #define TRUE 1
- #define FALSE 0
- #define OK 1
- #define ERROR 0
- #define INFEASIBLE -1
- #define OVERFLOW -2
- typedef int ElemType;
- //Status是函数的类型,其值是函数结果状态代码
- typedef int Status;
-
- #include "header.h"
- #define STACK_INIT_SIZE 10 //储空间的初始分配量
- #define STACK_INCREMENT 2 //存储空间的分配增量
- #define MAXSIZE 10
- typedef char SElemType; //多型数据类型
- typedef int ElemType;
-
- typedef struct StackNode
- {
-
- ElemType data;
- struct StackNode *next;
-
- }StackNode,*LinkStackPtr;
- typedef struct LinkStack
- {
-
- LinkStackPtr top;
- int count;
-
- }Stack;
- //=================================栈链初始化
- void InitStack(LinkStackPtr *base)
- {
- LinkStackPtr p=NULL;
- *base=(LinkStackPtr)malloc(sizeof(ElemType));
- (*base)->data=0;
- (*base)->next=NULL;
- }
- //=======================================进栈操作
- void Push(Stack *S,ElemType e)
- {
- LinkStackPtr p;
- p=(LinkStackPtr)malloc(sizeof(ElemType));
- p->data=e;
- p->next=S->top;
- S->top=p;
- S->count++;
-
- }
- //=======================================出栈操作
- void Pop(LinkStackPtr top,LinkStackPtr base,Stack *S,ElemType *e)
- {
- if(top!=base)
- {
- LinkStackPtr p;
- *e=top->data;
- p=S->top;
- S->top=top->next;
- S->count--;
- free(top);=============================================问题代码
-
-
- }
- else
- {
- printf("栈里已经没有元素可以打印了\n");
- }
- }
- //========================================打印链栈
- void print(LinkStackPtr base,LinkStackPtr top)
- {
- while(top!=base)
- {
- printf("%d\n",top->data);
- top=top->next;
- }
- }
- main()
- {
- LinkStackPtr base;
- Stack S;
- int i=1;
- ElemType e=0;
- InitStack(&base);
- S.top=base;
- S.count=0;
- for(i=1;i<=MAXSIZE;i++)
- {
- Push(&S,i);
- }
- printf("栈里有%d个元素\n",S.count);
- // free(S.top); ======================================问题代码
- print(base,S.top);
-
- for(i=1;i<=MAXSIZE;i++)
- {
- Pop(S.top,base,&S,&e);
- printf("Pop出来的元素为%d\n",e);
- printf("栈里有%d个元素\n",S.count);
- print(base,S.top);
-
- }
-
-
- return 0;
-
- }
-
复制代码
问题代码处:
//=======================================出栈操作
void Pop(LinkStackPtr top,LinkStackPtr base,Stack *S,ElemType *e)
{
if(top!=base)
{
LinkStackPtr p;
*e=top->data;
p=S->top;
S->top=top->next;
S->count--;
free(top);=============================================问题代码
}
else
{
printf("栈里已经没有元素可以打印了\n");
}
}
//========================================
如果把出栈操作中的free(top)代码注释掉,可以显示弹出内容正确,但是加了就报错,为什么不能释放成功啊,
我在主函数里测试,加上free()也是不能释放,这是为什么呢?
|
|