栈的创建及其基本操作.doc
文本预览下载声明
#includestdio.h
#includemalloc.h
#includestdlib.h
#define MAX_SIZE 100
#define SIZE 10
#define OK 1
#define ERROR 0
#define OVERFLOW 0
typedef struct
{
int *base;
int *top;
int stacksize;
}Sqstack;
int InitStack(Sqstack s)
{
s.base=(int*)malloc(MAX_SIZE*sizeof(int));
if(!s.base)
exit(OVERFLOW);
s.top=s.base;
s.stacksize=MAX_SIZE;
return OK;
}
int DestoryStack(Sqstack s)
{
free(s.base);
/*如果采用链表,因为每个节点是单独new出来的,那自然需要每个节点都进行释放
如果是采用数组,因为空间是统一new的,自然就只需要free一次了*/
// free(s.top);
return OK;
}
int ClearStack(Sqstack s)
{
s.top=s.base;
return OK;
}
int StackEmpty(Sqstack s)
{
if(s.top!=s.base)
return false;
else
return true;
}
int StackLength(Sqstack s)
{
int length=0;
if(s.top==s.base)
return 0;
// length=s.top-s.base;//亦可以
for(int *i=s.base;i!=s.top;i++)
++length;
return length;
}
int GetTop(Sqstack s,int e)
{
if(s.top==s.base)
return ERROR;
e=*(s.top-1);
return e;
}
int Push(Sqstack s,int e)
{
if(s.top-s.base = MAX_SIZE)
{
s.base=(int*)realloc(s.base,(s.stacksize+SIZE)*sizeof(int));
if(!s.base)
exit(OVERFLOW);
s.top=s.base+s.stacksize;//s.base可能换了个地址
s.stacksize+=SIZE;
}
*s.top++=e;
return OK;
}
int Pop(Sqstack s,int e)
{
if(s.top==s.base)
return ERROR;
e=*(--s.top);
return e;
}
int main()
{
Sqstack s;
int e=0;
InitStack(s);
Push(s,1);
Push(s,2);
//ClearStack(s);
for(int *i=s.base;i!=s.top;i++)
printf(%d\n,*i);
printf(%d\n,StackLength(s));
Pop(s,e);
for(int *j=s.base;j!=s.top;j++)
printf(%d\n,*j);
printf(%d\n,e);
DestoryStack(s);
return 0;
}
显示全部