seqstack.h
#ifndef _SEQSTACK_H_
#define _SEQSTACK_H_
#include <stdio.h>
#include <stdlib.h>
typedef struct seqstack
{
int *data;
int maxlen;
int top;
} seqstack_t;
//创建空顺序栈
seqstack_t *createEmptySeqStack(int len);
//判断是否为满,满返回1 未满返回0
int IsFull(seqstack_t *p);
//入栈,data代表入栈的数据
int pushSeqStack(seqstack_t *p, int data);
//判断栈是否为空
int isEmptySeqStack(seqstack_t *p);
//出栈
int popSeqStack(seqstack_t *p);
#endif
seqstack.c
#include "seqstack.h"
//创空
seqstack_t *createEmptySeqStack(int len)
{
seqstack_t *p = (seqstack_t *)malloc(sizeof(seqstack_t));
if (NULL == p)
{
perror("p malloc err");
return NULL;
}
p->top = -1;
p->maxlen = len;
p->data = (int *)malloc(sizeof(int) * len);
if (NULL == p->data)
{
perror("p->data malloc err");
return NULL;
}
return p;
}
//判满
int IsFUll(seqstack_t *p)
{
return p->top + 1 == p->maxlen;
}
//入栈
int pushSeqStack(seqstack_t *p, int data)
{
if (IsFUll(p))
{
printf("pushStack err\n");
return -1;
}
p->top++;
p->data[p->top] = data;
return 0;
}
//判断栈是否为空
int isEmptySeqStack(seqstack_t *p)
{
return p->top == -1;
}
//出栈
int popSeqStack(seqstack_t *p)
{
//容错判断
if (isEmptySeqStack(p))
{
printf("popSeqStack err\n");
return -1;
}
p->top--;
return p->data[p->top + 1];
}
main.c
#include "seqstack.h"
void convert(int num,seqstack_t *p)
{
//入栈
while (num > 0)
{
int n = num % 2;
pushSeqStack(p,n);
num = num / 2;
}
//出栈
while (!isEmptySeqStack(p))
{
printf("%d ",popSeqStack(p));
}
putchar(10);
}
int main(int argc, char const *argv[])
{
seqstack_t *p = createEmptySeqStack(8);
int num;
printf("输入一个十进制数:");
scanf("%d",&num);
convert(num,p);
return 0;
}
makefile
CC=gcc
GFLAGS=-c -g -Wall
OBJS=seqstack.o main.o
seqstack:$(OBJS)
$(CC) $^ -o $@
%.o:%.c
$(CC) $(GFLAGS) $< -o $@
.PHONY:clean
clean:
$(RM) seqstack *.o