順序棧
#include <stdio.h>
#include <stdlib.h>
//元素入棧
int push(int*a ,int top,int data)
{
a[++top] = data;
return top;
}
//元素出棧
int pop(int* a, int top)
{
if (top == -1)
{
return -1;
}
printf("彈出元素%d\n ", a[top]);
top--;
return top;
}
int main()
{
int a[100];
int top = -1;
top = push(a, top,1);
top = push(a, top, 2);
top = push(a, top, 3);
top = push(a, top, 4);
top = pop(a, top);
system("pause");
return 0;
}
鏈式棧
#include <stdio.h>
#include <stdlib.h>
typedef struct lineStack
{
int data;
struct lineStack* next;
}lineStack;
lineStack* push(lineStack* stack, int num)
{
//創建存儲新元素的節點
lineStack* line = (lineStack*)malloc(sizeof(lineStack));
line->data = num;
//新節點與頭結點建立關係
line->next = stack;
stack = line;
return stack;
}
//鏈表元素出棧
lineStack* pop(lineStack* stack)
{
if (stack)
{
//聲明一個新指針指向棧頂節點
lineStack* p = stack;
stack = stack->next;
printf("出棧元素:%d ", p->data);
if (stack)
{
printf("新棧頂元素:%d\n", stack->data);
}
else
{
printf("棧已空\n");
}
free(p);
}
else
{
printf("棧內沒有元素");
return stack;
}
return stack;
}
int main()
{
lineStack* stack = NULL;
stack = push(stack, 1);
stack = push(stack, 2);
stack = push(stack, 3);
stack = push(stack, 4);
stack = pop(stack);
stack = pop(stack);
stack = pop(stack);
stack = pop(stack);
stack = pop(stack);
system("pause");
return 0;
}