栈操作及数进制转换的实现(将十进制转换成二进制)只考虑整数
栈的基本操作包括:初始化栈、入栈、出栈、判定栈空、判定栈满、取栈顶元素等;
从数制转换示例可以看出,十进制数转换成相应二进制数可使用栈存放,再依次弹出栈顶元素输出,即可得到相应二进制结果。
栈的结构设置:
typedef int DataType;//采用链式栈
struct node{
DataType element; //数据元素
struct node *next; //指向下一个数据元素的指针 };
typedef struct node *PtrToNode;typedef struct node * Stack;
初始化栈(即创建空栈):
Stack createStack(void) {
Stack head=new struct node;
if(head==NULL) return NULL;
head->next=NULL;
}
入栈操作:
void push(DataType x,Stack s) { //表头作为栈顶,此处请填写代码实现压栈功能 Stack temp=new struct node;
temp->element=x;
if(s==NULL) s->next=temp;
else{ temp->next=s->next; s->next=temp;
}
出栈操作:
DataType pop(Stack s) { //此处请填写代码实现出栈并返回栈顶元素的功能,若栈为空,则返回-1
Stack temp=s->next;
if(isEmpty(temp)==1) return -1;
s->next=temp->next; free(temp);
}
判断栈空:若栈为空,则返回1,否则返回0
int isEmpty(Stack s) {
if(s==NULL) return 1;
else return 0;
}
十进制转二进制操作:
void convert10to2(int x)
{
//实现将参数x转换为二进制并输出的功能,使用上述栈的基本操作实现
Stack head=new struct node;
head=createStack();
while(x!=0){
push(x%2,head);
x=x/2;
}
while(isEmpty(head->next)==0){
cout<<head->next->element;
pop(head);
}
}