//
// main.cpp
// Stackdemo
//
// Created by 娄坤 on 2018/4/28.
// Copyright © 2018年 娄坤. All rights reserved.
//
// 顺序栈的基本操作
#include "stdio.h"
#include "stdlib.h"
#define StackSize 100
typedef int ElemType;
typedef struct {
ElemType data[StackSize];//存放数据
int top;//存放栈顶地址
}SeqStack;
//初始化栈
void initStack(SeqStack &s){
s.top = 0;
}
//判断栈是否为空栈
int isStackEmpty(SeqStack &s){
return(s.top == 0);
}
//判断是否栈满
int stackFull(SeqStack &s){
return(s.top == StackSize);
}
//入栈操作
int push(SeqStack &s,ElemType data){
if(s.top == StackSize){
printf("Stack overFlow");
return 0;
}
s.data[s.top] = data;
s.top++;
return 1;
}
//出栈操作
int pop (SeqStack &s,ElemType &data){
if(s.top == 0){
printf("栈空\n");
return 0;
}
s.top--;
data = s.data[s.top];
return 1;
}
//进栈出栈操作测试
void push_pop_Test(SeqStack &s){
int n;
printf("请输入进栈的元素个数:\n");
scanf("%d",&n);
int i,data;
for(i = 0;i < n;i++){
printf("请输入第%d个元素:\n",i+1);
scanf("%d",&data);
push(s, data);
}
int t;
printf("出栈操作:\n");
while(!isStackEmpty(s)){
pop(s,t);
printf("%d ",t);
}
printf("\n");
}
//获取栈顶指针
int getTop(SeqStack &s,ElemType &data){
if(s.top == 0){
printf("栈空\n");
return 0;
}
data = s.data[s.top-1];
return 1;
}
//二进制转换操作
void binary_convert(){
SeqStack s;
int x;
printf("请输入要转化的数据:\n");
scanf("%d",&x);
int r;
initStack(s);
printf("要转换的数据为:\n%d\n",x);
while (x!=0) {
r = x%2;
push(s,r);//数据进栈
x/=2;
}
int t;
printf("转换为二进制数据为:\n");
while (!isStackEmpty(s)) {
pop(s,t);
printf("%d",t);
}
printf("\n");
}
//十六进制转换
void sexadecimal(){
SeqStack s;
int x;
printf("请输入要转换的数据:\n");
scanf("%d",&x);
initStack(s);
int r;
while(x!=0){
r = x%16;
push(s,r);
x/=16;
}
int t;
printf("转换为十六进制的数为:\n");
while(!isStackEmpty(s)){
pop(s,t);
if(t>=10){
printf("%c", t - 10 + 'A');
}else{
printf("%d",t);
}
}
printf("\n");
}
int main(){
SeqStack s;
initStack(s);
//进栈出栈测试
//push_pop_Test(s);
//二进制转换
//binary_convert();
//十六进制转换
sexadecimal();
}
数据结构---线性表(栈的基本操作,进制转换)C语言实现
最新推荐文章于 2024-08-30 20:45:45 发布