数据结构之 栈(C语言实现)

来源:互联网 发布:网络信号增强器 编辑:程序博客网 时间:2024/04/23 17:40

数据结构之 栈(C语言实现)

1.栈的模型

栈(stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈的顶(top)。对栈的基本操作有push(进栈)和pop(出栈),前者相当于插入,后者则是删除最后插入的元素。最后插入的元素可以通过使用top例程在执行pop之前进行考察。对空栈进行的pop或top一般被认为是栈ADT的错误。另一方面,当运行push时空间用尽是一个实现错误,但不是ADT错误。
这里写图片描述

2. 栈的数组实现

  • stack.h文件
#ifndef _STACK_H_#define _STACK_H_#define EmptyTOS    -1  //空栈#define MinStackSize    5   //栈的最小值typedef int elementType;    //数据类型typedef struct stackRecord{    int capacity;//容量    int stackTop;//栈顶    elementType *array; }STACK;int isEmpty(STACK *s);  //判空int isFull(STACK *s);   //判满STACK *createStack(int maxElements);    //栈的创建void disposeStack(STACK *s);        //栈的释放void makeEmpty(STACK *s);       //创建空栈void push(elementType element, STACK *s);//入栈elementType top(STACK *s);      //返回栈顶元素void pop(STACK *s);         //出栈elementType topAndTop(STACK *s);    //出栈并返回栈顶元素#endif
  • stack.c
#include <stdlib.h>#include <stdio.h>#include "stack.h"int isEmpty(STACK *s){    return (s->stackTop == EmptyTOS);}int isFull(STACK *s){    return (s->stackTop == s->capacity -1);}STACK *createStack(int maxElements){    STACK *s;    if(maxElements < MinStackSize) {        printf("Stack size si too small\n");            return NULL;    }    s = (STACK *)malloc(sizeof(struct stackRecord));    s->array = (elementType *)malloc(sizeof(elementType) * maxElements);    s->capacity = maxElements;    makeEmpty(s);    return s;}void disposeStack(STACK *s){    if(s != NULL) {        free(s->array);         free(s);    }}void makeEmpty(STACK *s){    if(s != NULL) {        s->stackTop = EmptyTOS;     }}void push(elementType element, STACK *s){    if(!isFull(s)) {        s->stackTop++;        s->array[s->stackTop] = element;    } else {        printf("full stack\n");    }}elementType top(STACK *s){    if(!isEmpty(s)) {        return s->array[s->stackTop];       } else {        printf("empty stack\n");        return 0;    }}void pop(STACK *s){    if(!isEmpty(s))        s->stackTop--;      else        printf("empty stack\n");}elementType topAndTop(STACK *s){    if(!isEmpty(s)) {        return s->array[s->stackTop--];    } else {        printf("empty stack\n");            return 0;    }}
0 0