c语言_栈结构

一、不变顺序表(数组)实现栈

#include"stdio.h"
#define STACK_SIZE 5

int pushStack(char *arry, int top, char elem)
{
	top++;
	if (top ==STACK_SIZE)
	{
		printf("栈已经满无法进栈\n");
		return top - 1;
	}
	arry[top] = elem;
	return top;
}

int popStack(char *arry, int top)
{
	if (top == -1)
	{
		printf("栈为空,无法出栈");
		return -1;
	}
	printf("出栈元素为:%c\n", arry[top]);
	top--;
	return top;
}


int main()
{
	char arry[STACK_SIZE];
	int top = -1;
	top = pushStack(arry, top, 'a');
	top = pushStack(arry, top, 'b');
	top = pushStack(arry, top, 'c');
	top = pushStack(arry, top, 'd');
	top = pushStack(arry, top, 'e');
	top = pushStack(arry, top, 'f');
	top = popStack(arry, top);
	top = popStack(arry, top);
	top = popStack(arry, top);
	top = popStack(arry, top);
	top = popStack(arry, top);
	top = popStack(arry, top);
	return 0;
}

二、链表实现栈

#include "stdio.h"
#include"stdlib.h"
#define STACK_SIZE 5;


typedef struct node
{
	char elem;
	struct node *next;
}stackLink;

stackLink *stackPush(stackLink *top, char elem)
{
	stackLink *nodeLink = (stackLink*)malloc(sizeof(stackLink));
	nodeLink->elem = elem;
	nodeLink->next = top;
	top = nodeLink;
	return top;
}
stackLink *stackPop(stackLink *top)
{
	if (top == NULL)
	{
		printf("栈为空,无法出栈\n");
		return top;
	}
	printf("%c\n", top->elem);
	stackLink *nodefree = top;
	top = top->next;
	free(nodefree);
	return top;
}

int main()
{
	stackLink *top = NULL;
	top = stackPush(top, 'a');
	top = stackPush(top, 'b');
	top = stackPush(top, 'c');
	top = stackPush(top, 'd');
	top = stackPop(top);
	top = stackPop(top);
	top = stackPop(top);
	top = stackPop(top);
	top = stackPop(top);
}

三、可变顺序表(数组)实现栈

#include"stdio.h"
#include "stdlib.h"
#define STACK_SIZE 5

int pushStack(char *arry, int top, char elem)
{
	top++;
	if ((top / STACK_SIZE >= 1) && (top%STACK_SIZE == 0))
	{
		//printf("栈已经满无法进栈\n");
		printf("栈已经满,申请新的空间\n");
		static int i = 1;
		i++;
		arry = (char *)realloc(arry,i*STACK_SIZE*sizeof(char));
		//return top - 1;
	}
	printf("进栈元素为:%c\n", elem);
	arry[top] = elem;
	return top;
}

int popStack(char *arry, int top)
{
	if (top == -1)
	{
		printf("栈为空,无法出栈\n");
		return -1;
	}
	printf("出栈元素为:%c\n", arry[top]);
	top--;
	return top;
}


int main()
{
	//char arry[STACK_SIZE];
	char *arry = (char *)malloc(STACK_SIZE*sizeof(char));
	int top = -1;
	top = pushStack(arry, top, 'a');
	top = pushStack(arry, top, 'b');
	top = pushStack(arry, top, 'c');
	top = pushStack(arry, top, 'd');
	top = pushStack(arry, top, 'e');
	top = pushStack(arry, top, 'f');
	top = pushStack(arry, top, 'g');
	top = pushStack(arry, top, 'a');
	top = pushStack(arry, top, 'b');
	top = pushStack(arry, top, 'c');
	top = pushStack(arry, top, 'd');
	top = pushStack(arry, top, 'e');
	top = pushStack(arry, top, 'f');
	top = pushStack(arry, top, 'g');
	top = popStack(arry, top);
	top = popStack(arry, top);
	top = popStack(arry, top);
	top = popStack(arry, top);
	top = popStack(arry, top);
	top = popStack(arry, top);
	top = popStack(arry, top);
	top = popStack(arry, top);
	top = popStack(arry, top);
	top = popStack(arry, top);
	top = popStack(arry, top);
	top = popStack(arry, top);
	top = popStack(arry, top);
	top = popStack(arry, top);
	top = popStack(arry, top);
	top = popStack(arry, top);
	top = popStack(arry, top);
	top = popStack(arry, top);
	top = popStack(arry, top);
	top = popStack(arry, top);
	top = popStack(arry, top);
	free(arry);
	return 0;
}

总结:

实现栈结构可以使用数组或者链表都可以,数组效率高一些,占用的内存少一些。

发布了142 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_38293453/article/details/104342972