这几天博客拖了几天,不是因为偷懒。实在是太忙了,又是数据结构整理,又是项目的联习。
不多说,我把栈和队列的几种形式整理实现了一下。还是看代码吧。
强调一下,主函数的验证我就不发了,我写的报错函数也只在这一篇里面留,后面都是一样的,就不发了。
若有错误,我以后修改。
先是头文件
#ifndef __SQSTACK_H__
#define __SQSTACK_H__
#define FALSE 0
#define TRUE 1
#define SIZE 10
typedef int stack_data;
typedef struct _stack
{
stack_data data[SIZE];
int top;
}STACK;
//清空栈
int Init_stack(STACK * s);
//判断是否空栈
int Stack_Empty (STACK * s);
//判断是满空栈
int Stack_Full (STACK * s);
//入栈
int Push(STACK * s,stack_data x);
//压栈
int Pop(STACK * s,stack_data *x);
//取栈顶元素
int getStack(STACK * s,stack_data *x);
再是实现函数
#include<stdio.h>
#include"SqStack.h"
#include"error.h"
//清空栈
int Init_stack(STACK * s)
{
if ( s== NULL )
{
errno = ERROR;
return FALSE;
}
s->top = -1;
return TRUE;
}
//判断是否空栈
int Stack_Empty (STACK * s)
{
if ( s== NULL )
{
errno = ERROR;
return FALSE;
}
//或者可以写成return s->top == -1 相等返回1,不相等返回0
if (s->top == -1)
return TRUE;
else
return FALSE;
}
//判断是否满栈
int Stack_Full (STACK * s)
{
if ( s== NULL )
{
errno = ERROR;
return FALSE;
}
return s->top == SIZE-1;
}
//入栈
int Push(STACK * s,stack_data x)
{
if ( s== NULL )
{
errno = ERROR;
return FALSE;
}
if (Stack_Full(s) == TRUE)
{
errno = FULL;
return FALSE;
}
s->data[++s->top] = x;
return TRUE;
}
//出栈
int Pop(STACK * s,stack_data *x)
{
if ( s== NULL )
{
errno = ERROR;
return FALSE;
}
if (Stack_Empty(s) == TRUE)
{
errno = EMPTY;
return FALSE;
}
*x = s->data[s->top--];
return TRUE;
}
//取栈顶元素
int getStack(STACK * s,stack_data *x)
{
if ( s== NULL )
{
errno = ERROR;
return FALSE;
}
if (Stack_Empty(s) == TRUE)
{
errno = EMPTY;
return FALSE;
}
*x = s->data[s->top];
}
最后是报错函数和头文件
#ifndef __ERROR_H__
#define __ERROR_H__
#define ERROR -1
#define FULL -2
#define EMPTY -3
#define MALLOC_ERROR -4
#define QUEUE_FULL -5
#define QUEUE_EMPTY -6
int errno ;
//向屏幕输出错误原因
void myerror (char *str);
//向字符串传送错误原因
char * myStrError (int num);
#endif
#include<stdio.h>
#include"error.h"
void myerror (char *str)
{
char *msg = myStrError (errno);
printf("%s: %s\n",str,msg);
}
char * myStrError (int num)
{
switch (errno)
{
case ERROR:
return "%输入参数错误。";
case FULL:
return "满栈。";
case EMPTY:
return "空栈。";
case MALLOC_ERROR:
return "动态内存分配失败。";
case QUEUE_FULL:
return "队列已满。";
case QUEUE_EMPTY:
return "队列已空。";
}
}