博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言栈的实现
阅读量:5290 次
发布时间:2019-06-14

本文共 2362 字,大约阅读时间需要 7 分钟。

static.h

 

#define STATIC_INIT_SIZE 100

#define STATICINCREMENT 10
#define ERROR 0
#define OK 1
typedef struct {

int *base;//定义栈底

int *top;//定义栈顶元素
int staticsize;
}SqStatic;

typedef int Status;

//初始化一个空栈

Status InitStatic(SqStatic *S);

//销毁栈

Status DestroyStatic(SqStatic *S);

//清空栈

Status ClearStatic(SqStatic *S);

//判断栈是否为空

Status StaticEmpty(SqStatic S);

//获取栈的长度

int StaticLength(SqStatic S);

//获取栈顶元素的值

Status GetTop(SqStatic S, int *e);

//向栈中加入元素

Status Push(SqStatic *S,int e);

//删除栈顶元素并返回元素值

Status Pop(SqStatic *S, int *e);

void conversion(SqStatic *S)

 

 

StaticRealize.c

 

#include "stdlib.h"

#include "stdio.h"
#include "static.h"

Status InitStatic(SqStatic *S) {

//设置初始栈的大小

S->base = (int *)malloc(sizeof(int)*STATIC_INIT_SIZE);
if (!S->base) {
exit(0);
}
S->top = S->base;//空栈 s->top=s->base
*(S->top) = 0;//主要用来判断是否为空栈
S->staticsize = STATIC_INIT_SIZE;//栈的初始长度为100

return OK;

}
//获取栈顶元素的值
Status GetTop(SqStatic S, int *e) {

SqStatic q;

q = S;
//返回栈顶元素需要判断栈是否为空栈
if (S.base == S.top) return ERROR;

*e = *(q.top - 1);

return OK;

}

//元素的进栈

Status Push(SqStatic *S,int e) {
if ((S->top-S->base)>=S->staticsize) {

S->base = (int *)realloc(S->base,(STATICINCREMENT+STATIC_INIT_SIZE)*sizeof(int));

}
*(S->top) = e;

S->top++;

return OK;

}

Status Pop(SqStatic *S,int *e) {

if (S->top == S->base)return ERROR;

S->top--;
*e = *(S->top);

return OK;

}

Status StaticEmpty(SqStatic S) {

if (*(S.top) == 0) {

return OK;

}
return ERROR;
}

//返回栈中元素的个数
int StaticLength(SqStatic S) {

return S.top - S.base;

}

 

//十进制转换为二进制

void conversion(SqStatic *S) {

printf("请输入要转换的整数\n");

int n;
int e;
scanf("%d",&n);
while (n)
{
int c = n % 2;
Push(S,c);
n =n/2;
}
printf("输出转换后的二进制\n");
while (!StaticEmpty(*S))
{
Pop(S,&e);

printf("%d",e);

}

printf("\n");

}

 

 

StaticFunction.c

 

#include "stdio.h"

#include "stdlib.h"
#include "static.h"
//主函数
void main() {
//初始化一个空栈
SqStatic S;
int e,f;

InitStatic(&S);

// printf("判断栈是否为空栈%d\n", StaticEmpty(S));
Push(&S,1);
GetTop(S, &e);
printf("栈顶元素为%d\n", e);
Push(&S,2);
GetTop(S, &e);
printf("栈顶元素为%d\n", e);
Push(&S,3);
GetTop(S, &e);
printf("栈顶元素为%d\n", e);

Push(&S,4);

GetTop(S, &e);
printf("栈顶元素为%d\n",e);

Pop(&S, &f);

printf("弹出的值为%d\n",f);

Pop(&S, &f);

//10进制转换为二进制

conversion(&S);

printf("弹出的值为%d\n", f);

printf("判断栈是否为空栈%d\n", StaticEmpty(S));

printf("栈的长度为%d\n",StaticLength(S));

}

 

转载于:https://www.cnblogs.com/paulversion/p/7576079.html

你可能感兴趣的文章
PHP魔术方法之__call与__callStatic方法
查看>>
ubuntu 安装后的配置
查看>>
Html学习_简易个人网页制作
查看>>
angular中ng-bind指令小案例
查看>>
jqery总结
查看>>
Lodop获取客户端主网卡ip地址是0.0.0.0
查看>>
VSCODE更改文件时,提示:EACCES: permission denied的解决办法(mac电脑系统)
查看>>
web前端之路,js的一些好书(摘自聂微东 )
查看>>
【模板】对拍程序
查看>>
微信小程序开发初体验
查看>>
dos批处理(bat)运行exe
查看>>
关键字
查看>>
Pycharm安装Markdown插件
查看>>
上传图片并预览
查看>>
哈夫曼编码_静态库
查看>>
【转】redo与undo
查看>>
C#更新程序设计
查看>>
常用Request对象获取请求信息
查看>>
解决升级系统导致的 curl: (48) An unknown option was passed in to libcurl
查看>>
Shell命令-内置命令及其它之watch、date
查看>>