ITPub博客

首页 > > > C语言实现栈这个有啥问题

C语言实现栈这个有啥问题

作者:dapan 时间:2019-10-28 22:05:17 0 删除 编辑
#include "stdio.h"
#include "stdlib.h"

struct List{
	int data;
	struct List * next;
}; 

struct Stack{
	struct List *head;
	int size;
};


int StackInit(struct Stack *stack)
{
	stack->head =  (struct List*)malloc(sizeof(struct List));
	stack->size = 0;
}

int StackPush(struct Stack *stack,int data)
{
	struct List *tmp = (struct List *)malloc(sizeof(struct List));
	tmp->data = data;
	tmp->next = stack->head->next;
	stack->head->next = tmp;
	stack->size++;
	return 0;
}

int IsStackEmpty(struct Stack *stack)
{
	if(stack->head->next == NULL)
		return 1;
	else
		return 0;
}

int StackPop(struct Stack *stack,int *data)
{
	struct List *tmp = NULL;
	if(IsStackEmpty(stack))
		return -1;
		
	tmp = stack->head->next;
	*data = tmp->data;
	stack->head->next = tmp->next;
	stack->size--;
	free(tmp);
	return 0;
}


int main(void)
{
	int i = 0;
	struct Stack *stack = NULL;
	StackInit(stack);
	for(i = 0;i<5;i++)
	{
		StackPush(stack,i);
	}
	for(i = 0;i<5;i++)
	{
		StackPop(stack,&i);
		printf("%d ",i);
	}
	printf("\n");
	return 0;
}

留言回复~~


今天稍微修改了下,大家可以再看看

#include "stdio.h"
#include "stdlib.h"

struct List{
	int data;
	struct List * next;
}; 

struct Stack{
	struct List *head;
	int size;
};


struct Stack * StackInit(void)
{
	struct Stack *stack = NULL;
	stack =  (struct Stack*)malloc(sizeof(struct Stack));
	stack->head = (struct List *)malloc(sizeof(struct List));
	stack->head->next = NULL; 
	stack->size = 0;
	return stack;
}

int StackPush(struct Stack *stack,int data)
{
	struct List *tmp = (struct List *)malloc(sizeof(struct List));
	tmp->data = data;
	tmp->next = stack->head->next;
	stack->head->next = tmp;
	stack->size++;
	//printf("push:%d \n",data); 
	return 0;
}

int IsStackEmpty(struct Stack *stack)
{
	/*如果头指针指向下一个为空,说明栈为空*/
	if(stack->head->next == NULL)
		return 1;
	else
		return 0;
}

int StackPop(struct Stack *stack,int *data)
{
	struct List *tmp = NULL;
	if(IsStackEmpty(stack))
		return -1;
		
	tmp = stack->head->next;
	*data = tmp->data;
	stack->head->next = tmp->next;
	stack->size--;
	free(tmp);
	
	//printf("pop:%d \n",*data); 
	return 0;
}


int main(void)
{
	int i = 0;
	struct Stack *stack = NULL;
	stack = StackInit();
	for(i = 0;i<5;i++)
	{
		StackPush(stack,i);
	}
	for(i = 0;i<5;i++)
	{
		int data = 0;
		StackPop(stack,&data);
		printf("%d ",data);
	}
	printf("\n");
	return 0;
}

原文作者:;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2020-08-07

  • 博文量
    4504
  • 访问量
    87121