一、栈
<1>性质:先进后出
<2>操作:入栈(压栈)push
出战(弹栈)pop
二、顺序栈
1、声明
#ifndef _SEQSTACK_H_
#define _SEQSTACK_H_
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define N 32
typedef int DataType;
typedef struct seqstack
{
DataType data[N];
int top;
}seqstack;
seqstack *SeqStackCreate();
bool SeqStackIsFull(seqstack *s);
bool SeqStackIsEmpty(seqstack *s);
void SeqStackPush(seqstack *s,DataType value);
void SeqStackPop(seqstack *s);
#endif
2、主函数
#include "seqstack.h"
int main(int argc, const char *argv[])
{
return 0;
}
3、调用函数
3.1、初始化
#include "seqstack.h"
seqstack *SeqStackCreate()
{
seqstack *s = (seqstack*)malloc(sizeof(seqstack));
s -> top = -1;
}
3.2、判断表是否已满
bool SeqStackIsFull(seqstack *s)
{
return s -> top == N - 1 ? 1 : 0;
}
3.3、判断表是否为空
bool SeqStackIsEmpty(seqstack *s)
{
return s -> top == -1 ? 1 : 0;
}
3.4、入栈
void SeqStackPush(seqstack *s,DataType value)
{
if(SeqStackIsFull(s))
{
printf("栈已满\n");
return;
}
s -> top++;
s -> data[s -> top] = value;
}
3.5、出栈
void SeqStackPop(seqstack *s)
{
if(SeqStackIsEmpty(s))
{
printf("栈已空\n");
return -1;
}
DataType value = s -> data[s -> top];
s -> top--;
return value;
}
三、链栈
1、声明
#ifndef _LINKSTACK_H_
#define _LINKSTACK_H_
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef int DataType;
typedef struct node
{
DataType data;
struct node *next;
}Node;
typedef struct Stack
{
Node *top;
int length;
}stack;
#endif
2、主函数
#include "linkstack.h"
int main()
{
return 0;
}
3、调用函数
3.1、初始化
#include "linkstack.h"
void InitStack(stack *s)
{
s -> top = NULL;
s -> length = 0;
}
3.2、入栈
void push(stack *s,DataType num)
{
if(NULL == s)
{
return;
}
Node *tmp = (Node*)malloc(sizeof(Node));
tmp -> data = num;
tmp -> next = NULL;
tmp -> next = s -> top;
s -> top = tmp;
s -> length++;
}
3.3、出栈
DataType pop(stack *s)
{
if(NULL == s)
{
retuen -1;
}
if(s -> top == NULL)
{
return -1;
}
Node *tmp = s -> tmp;
DataType value = tmp -> data;
s -> top = tmp -> next;
free(tmp);
s -> length--;
return value;
}
3.4、栈顶
DataType GetTop(stack *s)
{
if(NULL == s)
{
return -1;
}
if(NULL == s -> top)
{
return -1;
}
return s -> top ->data;
}