数据结构-C语言实现的一个链式栈

直接上代码,温故而知新,思路比以前清晰的不少

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实现一遍

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章