#include "stdio.h"
#include "stdlib.h"
#define MAX 50
#define OK 1
#define ERROR 0
#define YES 1
#define NO 0
typedef int ElemType
typedef int Status
typedef struct tagStack{
ElemType data[MAX]
int top
}Stack
void InitStack(Stack *s){
s->top=-1
}
Status isEmpty(Stack *s){
if(s->top==-1) return YES
return NO
}
Status Push(Stack *s,ElemType elme){
if(s->top>MAX)return ERROR
s->top++
s->data[s->top]=elme
return OK
}
ElemType Pop(Stack *s){
if(s->top==-1) return -1
return s->data[s->top--]
}
int main(void){
int flag
int b
ElemType elemy
Stack mystack
InitStack(&mystack)
printf("Input number please:\n")
scanf("%d",&flag)
while(flag<0){
printf("You must input a number(>0)\n")
scanf("%d",&flag)
}
while(flag!=0){
b=flag%2
if(Push(&mystack,b)==ERROR){
printf("ERROR\n")
break
}
flag=flag/2
}
printf("\n")
while(isEmpty(&mystack)!=YES){
elemy=Pop(&mystack)
printf("%d ",elemy)
}
printf("\n")
return 0
}
如输入整数65,以下是执行结果:
Input number please:
65
1 0 0 0 0 0 1
Press any key to continue
1、栈(stack)又名堆栈,它是一种运算受限的线性表。
其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
2、例程:
#include <stdio.h>#include <stdlib.h>
#define Max 100
typedef char T
typedef struct MyStack
{
T aa[Max]
unsigned int p
} stack
//创建空栈
stack* createEmptyStack()
{
stack* st = (stack *)malloc(sizeof(stack))
int i=0
for(i=0i<Maxi++)
st->aa[i]=0
st->p=0
return st
}
//栈判空
int isEmpty(const stack* st)
{
if(st->p==0) return 1
else return 0
}
//求栈的大小
unsigned int size(const stack* st)
{
return st->p
}
//push *** 作
void push(stack* st,const T a)
{
st->p=st->p+1
if(st->p==Max)
{
printf("栈满\n")
st->p--
return
}
st->aa[st->p]=a
}
//pop *** 作
T pop(stack* st)
{
if(isEmpty(st))
{
printf("栈空")
return NULL
}
char t=st->aa[st->p]
st->p=st->p-1
printf("%c ",t)
return t
}
//栈销毁
void destroy(stack* st)
{
free(st)
}
int main()
{
stack* st = createEmptyStack()
if(isEmpty(st)) printf("MyStack is empty\n")
else printf("MyStack is not empty\n")
push(st,'a')
push(st,'b')
push(st,'c')
push(st,'d')
push(st,'e')
printf("%d\n",size(st))
while(!isEmpty(st)) pop(st)
destroy(st)
system("pause")
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)