前端之家收集整理的这篇文章主要介绍了
【数据结构】【C】顺序栈,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
/* 文件一: 顺序栈头文件 */
#ifndef __SEQSTACK_H
#define __SEQSTACK_H
//#include <stdafx.h>
/* VS2012不支持bool,自己定义 */
#define bool int
#define true 1
#define false 0
#define MAXSIZE 1024
//typedef int ElemType;
typedef struct{
//ElemType data[MAXSIZE];
int data[MAXSIZE];
int top;
}SeqStack;
/**
* 初始化
* @param void 不接受参数
* @return SeqStack * 返回指向SeqStack的指针
**/
extern SeqStack *init_Stack(void);
/**
* 判断s是否为空
* @param s 要操作的顺序栈s
* @return bool true:入栈成功; false:传参有误或空间不足
**/
extern bool empty_stack(SeqStack *s);
/**
* 入栈
* @param s 要操作的顺序栈s
* @param val 入栈的元素val
* @return bool true:入栈成功; false:传参有误或空间不足
**/
extern bool push_stack(SeqStack *s,int val);
/**
* 出栈
* @param s 要操作的顺序栈s
* @param val 保存弹出元素的指针
* @return bool true:入栈成功; false:传参有误或空间不足
**/
extern bool pop_stack(SeqStack *s,int *val);
/**
* 读取栈顶元素
* @param s 要操作的顺序栈s
* @return ElemType 返回栈顶元素的值,若s为空栈则返回0
**/
extern int top_stack(SeqStack *s);
#endif
/* 文件二:顺序栈c文件 */
#include "SeqStack.h"
#include <stdlib.h>
// 顺序栈初始化
SeqStack *init_Stack(void){
SeqStack *s = (SeqStack *)malloc(sizeof(SeqStack));
s->top = -1;
return s;
}
// 判空
bool empty_stack(SeqStack *s){
if(s == NULL || s->top == -1){
return true;
}else{
return false;
}
}
// 入栈
bool push_stack(SeqStack *s,int val){
if(s == NULL || s->top == MAXSIZE-1){
return false;
}else{
s->top++;
s->data[s->top] = val;
return true;
}
}
// 出栈
bool pop_stack(SeqStack *s,int *val){
if(s == NULL || s->top == -1){
return false;
}else{
*val = s->data[s->top];
s->top--;
return true;
}
}
// 读取栈顶
int top_stack(SeqStack *s){
if(s == NULL || s->top == -1){ // 如果栈不存在
return 0;
}else{
return s->data[s->top];
}
}
/* 顺序栈的简单应用 */
/**
* 栈的简单应用:将一个十进制数转换为任意进制的数字
* 简单分析:
* @param val 十进制数
* @return Hex 目标进制的数字
**/
/* - - - - 利用顺序栈实现 - - - - */
#include <stdio.h>
#include "SeqStack.h"
void convert(int dec,int base){
SeqStack *s = init_Stack();
printf("dec(%d) >> base.%d(",dec,base);
while (dec != 0){
push_stack(s,dec % base);
dec /= base;
}
while ( !empty_stack(s) ){
int val;
pop_stack(s,&val);
printf("%d",val);
}
printf(")\n");
}
int main(void){
convert(100,2); // 转换为2进制数
convert(100,8); // 转换为8进制数
convert(100,16); // 转换为16进制数
convert(100,32); // 转换为32进制数
return 0;
}