数据结构:数组栈

来源:互联网 发布:淘宝怎么取消延长收货 编辑:程序博客网 时间:2024/06/07 12:02

这几天博客拖了几天,不是因为偷懒。实在是太忙了,又是数据结构整理,又是项目的联习。

不多说,我把栈和队列的几种形式整理实现了一下。还是看代码吧。

强调一下,主函数的验证我就不发了,我写的报错函数也只在这一篇里面留,后面都是一样的,就不发了。

若有错误,我以后修改。

先是头文件

#ifndef __SQSTACK_H__#define __SQSTACK_H__#define FALSE 0#define TRUE 1#define SIZE 10typedef 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,不相等返回0if (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  -6int 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 "队列已空。";}}



原创粉丝点击