直接上代碼,溫故而知新,思路比以前清晰的不少
stack.h
/*************************************************************************
> File Name: stack.h
> Author: bairutai
> Mail: [email protected]
> Created Time: 2015年09月11日 星期五 10時51分13秒
************************************************************************/
#ifndef _STACK_H_
#define _STACK_H_
#include <stdbool.h>
typedef int T;
typedef struct node *PNode;
typedef struct node{
T data;
PNode next;
}Node;
typedef struct{
int size;
PNode head;
}Stack;
/*構造一個空棧*/
Stack *InitEmptyStack();
//摧毀一個棧
void destory(Stack *);
//棧頭元素出棧
PNode pop(Stack*);
//元素入棧
void push(Stack *, T);
//判斷是否爲空棧
bool isEmpty(Stack *);
#endif
stack.c
/*************************************************************************
> File Name: Stack/stack.c
> Author: bairutai
> Mail: [email protected]
> Created Time: 2015年09月11日 星期五 11時07分12秒
************************************************************************/
#include<stdio.h>
#include"stack.h"
#include<malloc.h>
Stack *InitEmptyStack()
{
Stack *stack = (Stack*)malloc(sizeof(Stack));
stack->size = 0;
stack->head = NULL;
}
void destory(Stack *stack)
{
if (NULL == stack) {
return;
}
while(!isEmpty(stack))
{
pop(stack);
}
free(stack);
}
bool isEmpty(Stack *stack)
{
if (NULL == stack)
{
return false;
}
else
{
if(0 == stack->size && NULL == stack->head)
{
return true;
}
else
{
return false;
}
}
}
void push(Stack *stack, T data)
{
if (NULL == stack)
{
return;
}
else
{
if (isEmpty(stack))
{
PNode node = (PNode)malloc(sizeof(Node));
node->data = data;
node->next = NULL;
stack->head = node;
stack->size++;
}
else
{
PNode node = (PNode)malloc(sizeof(Node));
node->data = data;
node->next = stack->head;
stack->head = node;
stack->size++;
}
}
}
PNode pop(Stack *stack)
{
if(NULL == stack)
{
return NULL;
}
else
{
if(isEmpty(stack))
{
return NULL;
}
else
{
PNode node = stack->head;
stack->head = node->next;
stack->size--;
return node;
}
}
}
test.c
/*************************************************************************
> File Name: test.c
> Author: bairutai
> Mail: [email protected]
> Created Time: 2015年09月11日 星期五 12時09分36秒
************************************************************************/
#include<stdio.h>
#include"stack.h"
void main(){
Stack *stack = InitEmptyStack();
int i = 0;
for(i;i<5;i++)
{
push(stack,i);
printf("%d 入棧\n", i);
}
printf("棧頭元素 :%d\n",stack->head->data);
printf("棧的大小 :%d\n",stack->size);
while(0 != stack->size){
PNode node = pop(stack);
printf("%d 出棧\n", node->data);
}
if (isEmpty(stack)){
printf("stack 是個空棧\n");
}
//printf("棧頭元素 :%d\n", stack->head->data);
//printf("棧的大小 :%d\n", stack->size);
}
結果
0 入棧
1 入棧
2 入棧
3 入棧
4 入棧
棧頭元素 :4
棧的大小 :5
4 出棧
3 出棧
2 出棧
1 出棧
0 出棧
stack 是個空棧
有空再把數據結構用java實現一遍