加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

【数据结构】【C】顺序栈

发布时间:2020-12-15 06:34:14 所属栏目:安全 来源:网络整理
导读:/* 文件一: 顺序栈头文件 */#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[MA
/* 文件一: 顺序栈头文件 */

#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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读