數據結構-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實現一遍

 

 

 

 

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