目录
约瑟夫环
栈二进制
#ifndef _WORK_H_
#define _WORK_H_
#define MAX 8
typedef int datatype;
typedef struct
{
datatype *data; //指向堆区空间,用于存储栈的容器
int top; //记录栈顶元素的下标
}Stack, *StackPtr;
//二进制
int stack_push(StackPtr S,datatype e);
//创建栈
StackPtr stack_create();
//判空
int stack_empty(StackPtr S);
//判满
int stack_full(StackPtr S);
//遍历栈
void stack_show(StackPtr S);
#include"work.h"
#include<stdio.h>
#include<stdlib.h>
//创建栈
StackPtr stack_create()
{
//在堆区申请一个顺序栈的大小
StackPtr S = (StackPtr)malloc(sizeof(Stack));
if(NULL == S)
{
printf("栈申请失败");
return NULL;
}
//给栈中的连续空间申请内容
S->data = (datatype *)malloc(sizeof(datatype)*MAX);
if(NULL==S->data)
{
printf("申请失败\n");
free(S); //数组空间申请失败,整个栈就没意义了
return NULL;
}
//初始化
S->top = -1; //表明现在是一个空栈
printf("创建成功\n");
return S;
}
//判空 空返回真,非空返回假
int stack_empty(StackPtr S)
{
if(NULL != S) //判断逻辑
{
return S->top == -1;
}
printf("所给链表不合法\n");
return -1;
}
//判满 满返回真 非满返回假
int stack_full(StackPtr S)
{
//判断逻辑
if(NULL != S)
{
return S->top == MAX-1;
}
printf("所给链表不合法\n");
return -1;
}
int stack_push(StackPtr S,datatype e)
{
if(NULL==S||stack_full(S))
{
printf("入栈失败\n");
return 0;
}
for(;e>0;)
{
S->top++;
S->data[S->top]=e%2;
e=e/2;
}
printf("入栈成功\n");
return 1;
}
//遍历栈
void stack_show(StackPtr S)
{
//判断逻辑
if(NULL==S || stack_empty(S))
{
printf("遍历失败\n");
return ;
}
//开始遍历
printf("从栈顶到栈底元素分别是:");
for(int i=S->top; i>=0; i--)
{
printf("%d\t", S->data[i]);
}
printf("\n");
}
#include"work.h"
#include<stdio.h>
int main(int argc, const char *argv[])
{
//创建一个顺序栈
StackPtr S = stack_create();
if(NULL==S)
{
return -1;
}
//调用入栈函数
//调用遍历函数
stack_push(S,10);
stack_show(S);
return 0;
}