大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#define STACK_SIZE 100 //定义栈容量为100
仙桃网站建设公司成都创新互联,仙桃网站设计制作,有大型网站制作公司丰富经验。已为仙桃近千家提供企业网站建设服务。企业网站搭建\成都外贸网站制作要多少钱,请找那个售后服务好的仙桃做网站的公司定做!
int contents[STACK_SIZE]; //定义数组contents用作栈
int top = 0; //定义并初始化栈顶指针为0
//函数作用:清空栈
void make_empty(void)
{
top = 0; //直接将栈顶指针置0
}
//函数作用:判断栈是否为空
bool is_empty(void)
{
return top == 0; //返回top是否等于0
}
//函数作用:判断栈是否已满
bool is_full(void)
{
return top == STACK_SIZE; //返回top是否等于STACK_SIZE
}
//函数作用:向栈中压入一个元素i
void push(int i)
{
if(is_full()) //如果栈已满
stack_overflow(); //执行栈上溢操作
else //否则可以入栈
contents[top++] = i; //向栈中压入i,然后将栈顶指针+1
}
//函数作用:弹出栈顶元素并返回
int pop(void)
{
if(is_empty()) //如果栈为空
stack_underflow(); //执行栈下溢操作
else //否则可以出栈
return contents[--top]; //返回栈顶元素,然后将栈顶指针-1
}
因为堆栈是链式栈,是否满栈取决于堆存储的大小。堆空间耗尽时,可以狭义地理解为栈满。
那么在编程时,可以用一个变量保存栈元素的个数。栈是否满,取决于申请动态内存时的返回值,如
Stack
*p
=
(Stack
*)malloc(sizeof(Stack));,若(p
==
NULL),则栈满。
#define STACK_SIZE 100
#define PUSH_POP_SUCCESS 1
#define PUSH_POP_ERROR 0
struct _stackbuf {
int _collection[STACK_SIZE];
int _top;
};
typedef struct _stackbuf S_STACK;
typedef unsigned int u_int_f;
// 入栈
u_int_f push(S_STACK *stack, int d){
if (stack-_top = STACK_SIZE) return PUSH_POP_ERROR;
stack-_collection[stack-_top++] = d;
return PUSH_POP_SUCCESS;
}
// 出栈
u_int_f pop(S_STACK *stack, int *e){
if (!stack-_top) return PUSH_POP_ERROR;
*e=stack-_collection[--(stack-_top)];
return PUSH_POP_SUCCESS;
}
int main(){
S_STACK stack = { {0},0 };
push(stack, 1);
push(stack, 2);
push(stack, 3);
int gv = 0;
pop(stack, gv);
printf("%d\n", gv);
system("PAUSE");
return 0;
}
1、初始化栈
/*功能:初始化栈
*函数名:InitStack
*返回值:void
*/
void InitStack(stack *p)
{
p-top=-1;
}
2、判断栈为满
/*功能:判断栈为满
*函数名:IsFull
*返回值:为满——真1,非满——假0
*/
BOOL IsFull(stack *p)
{
if(MAXSIZE-1==p-top)
{
return TRUE;
}else
{
return FALSE;
}
}
3、判断栈为空
/*功能:判断栈为空
* 函数名:IsEmpty
*返回值:为空——真1,非空——假0
*/
BOOL IsEmpty(stack *p)
{
if(-1==p-top)
{
return TRUE;
}else
{
return FALSE;
}
}
4、进栈
/*功能:进栈
*函数名:push
*返回值:成功TRUN 失败FALSE
*注:不能为满,否则进栈失败
*/
BOOL push(stack *p,StackType data)//p=s
{
//判断栈是否为满
if(TRUE==IsFull(p))//为满
{
return FALSE;//返回失败
}
p-buf[++p-top]=data;
return TRUE;//返回成功
}
5、出栈
/*功能:出栈
*函数名:pop
*返回值:出栈成功TRUE 失败FALSE
*/
BOOL pop(stack *p,StackType *pd)
{
//判断是否为空,为空出栈无意义
if(TRUE==IsEmpty(p))
{
return FALSE;//出栈失败
}
*pd=p-buf[p-top--];//优先级-大于--
return TRUE;//出栈成功
}
扩展资料:
主函数:
void main()
{
//定义变量:类型 变量名
//struct st s;
struct st s;//分配空间
//初始化
InitStack(s);
int num=0;
printf("请输入");
scanf("%d",num);
//求二进制
while(num!=0)
{
//将余数入栈
if(FALSE==push(s,num%2))
{
return;//结束
}
num/=2;
}
//将二进制结果取出来
char value=0;
while(FALSE!=pop(s,value))
{
printf("%d",value);
}
printf("\n");
}