一、不变顺序表(数组)实现栈
#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;
}
总结:
实现栈结构可以使用数组或者链表都可以,数组效率高一些,占用的内存少一些。