程序功能:对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数。
头文件:c3-1.h
#ifndef C_3_1_H
#define C_3_1_H
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define TRUE 1
#define FALSE 0
#endif
algorithm.h
//头文件里面最好只放声明类的文件
#ifndef ALGORITHM_H
#define ALGORITHM_H
#include "c3-1.h"
typedef int ElementType;
//结点
typedef struct node
{
int data;
struct node *pNext; //这个指针需要指向下一个结点
}NODE, *PNODE;
//栈
typedef struct StackRecord
{
PNODE base;
PNODE top;
}Stack, *PStack;
//函数声明
int InitStack(PStack s);
int StackEmpty(PStack s);
int DestroyStack(PStack s);
int ClearStack(PStack s);
void Push(PStack s, int value);
int Pop(PStack s, int *e);
#endif
子程序
#include "algorithm.h"
#include "c3-1.h"
//初始化一个链表栈
int InitStack(PStack s)
{
s->top = (NODE *)malloc(sizeof(NODE));
if (NULL == s->top)
{
printf("Error!\n");
return FALSE;
}
else
{
s->base = s->top;
s->top->pNext = NULL;
return TRUE;
}
}
//销毁一个栈
int DestroyStack(PStack s)
{
free(s->base);
s->base = NULL;
free(s->top);
s->top = NULL;
return TRUE;
}
int ClearStack(PStack s)
{
s->top = s->base;
return TRUE;
}
//入栈
void Push(PStack s, int value)
{
PNODE pNew = (NODE *)malloc(sizeof(NODE));
pNew->data = value;
pNew->pNext = s->top;
s->top = pNew;
}
//判断栈是否为空
int StackEmpty(PStack s)
{
return s->top==s->base;
}
//出栈
int Pop(PStack s, int *e)
{
if (StackEmpty(s))
{
printf("栈为空,出栈失败!\n");
return FALSE;
}
else
{
PNODE p = s->top;
*e = p->data;
s->top = p->pNext;
free(p);
p = NULL;
return TRUE;
}
}
测试主函数:
/*
对于输入的任意一个非负十进制整数,
打印输出与其等值的八进制数
*/
#include "algorithm.h"
#include "c3-1.h"
int main(void)
{
Stack s;
unsigned n = 0;
int e = 0;
int i = 0;
i = InitStack(&s);
printf("栈初始化是否成功;%d(1:成功,0:失败!)\n", i);
printf("n(>=0) = ");
scanf("%u", &n);
while (n)
{
Push(&s, n%8);
n = n / 8;
}
while(!StackEmpty(&s))
{
Pop(&s, &e);
printf("%d", e);
}
printf("\n");
return 0;
}
运行结果