您的位置:首页 > 理论基础 > 数据结构算法

栈-顺序表实现

2013-11-24 01:07 190 查看
/***********************************************************************
*Copyright (c)
*Others:注意malloc(0*sizeof(int))的问题
***********************************************************************/

#include <stdio.h>
#include <stdlib.h>

struct SequentialStack
{
int* date;        /*数据域*/
int top;          /*date[top]指向栈顶元素,栈为空时,top=-1*/
int stacksize;    /*栈空间的大小*/
};

typedef struct SequentialStack SqStack;
typedef SqStack* SSp;

/***********************************************************************
*0.错误函数
***********************************************************************/
void Error(char* s)
{
printf("%s\n",s);
}

/***********************************************************************
*1.初始化栈
***********************************************************************/
void InitSequentialStack(SSp p,int n)
{
p->date=(int*)malloc(n*sizeof(int));
p->top=-1;
p->stacksize=n;
}

/***********************************************************************
*2.销毁栈
***********************************************************************/
void DestroySequentialStack(SSp p)
{
p->top=-1;
p->stacksize=0;
free(p->date);
}

/***********************************************************************
*3.求栈长
***********************************************************************/
int LengthSequentialStack(SSp p)
{
return p->top + 1;
}

/***********************************************************************
*4.取栈顶元素
***********************************************************************/
int GetTopLengthSequentialStack(SSp p)
{
if(p->top != -1)
{
return p->date[p->top];
}
else
{
Error("Stack Empty!");
return 0;
}
}

/***********************************************************************
*5.入栈
***********************************************************************/
void PushSequentialStack(SSp p,int x)
{
if((p->top + 1) >= (p->stacksize))
{
Error("Stack Overflow!");
}
else
{
p->top = p->top + 1;
p->date[p->top] = x;
}
}

/***********************************************************************
*6.出栈
***********************************************************************/
int PopSequentialStack(SSp p)
{
if((p->top) >= 0)
{
int x = p->date[p->top];
p->top = p->top - 1;
return x;
}
else
{
Error("Stack Empty!");
return 0;
}
}

/***********************************************************************
*7.依次弹出栈中所有元素
***********************************************************************/
void PrintPopSequentialStack(SSp p)
{
int i = p->top;
printf("栈内元素如下:");
while(i >= 0)
{
printf("%d ",p->date[i]);
i = i -1;
}
printf("\n输出完毕\n\n");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 C