1.栈的顺序存储实现
#include<stdio.h>
#define MaxSize 10
typedef struct Stack {
int data[MaxSize];
int top;
}SqStack;
void InitStack(SqStack* S) {
(*S).top = -1;
}
void printStack(SqStack S) {
for (int i = 0; i < S.top+1; ++i) {
printf("%d ", S.data[i]);
}
printf("\n\n\n");
}
int Push(SqStack* S, int e) {
if ((*S).top == MaxSize - 1) {
return 0;
}
(*S).top++;
(*S).data[(*S).top] = e;
return 1;
}
int Pop(SqStack* S,int *e) {
if ((*S).top == -1) {
return 0;
}
(*e) = (*S).data[(*S).top];
(*S).top--;
return 1;
}
void main() {
SqStack S;
InitStack(&S);
for (int i = 0; i < 5; i++) {
Push(&S,i);
}
printStack(S);
int e;
Pop(&S, &e);
printf("%d\n\n\n",e);
printStack(S);
}
2.栈的无头结点实现
#include <stdio.h>
#include <stdlib.h>
typedef struct Stacksss {
int data;
struct Stacksss* next;
}LStack,*LinkStack;
void InitLinkStack(LinkStack* L) {
(*L) = NULL;
}
void printStack(LinkStack L) {
while (L!=NULL) {
printf("%d ",L->data);
L = L->next;
}
}
int addStack(LinkStack* L,int e) {
printf("%d\n",e);
if ((*L) == NULL) {
(*L) = (LStack*)malloc(sizeof(LStack));
(*L)->data = e;
(*L)->next = NULL;
return 1;
}
LStack* S = (LStack*)malloc(sizeof(LStack));
S->data = e;
S->next = (*L);
(*L) = S;
return 1;
}
int deleteStack(LinkStack* L) {
(*L) = (*L)->next;
}
void main(){
LinkStack L;
InitLinkStack(&L);
printStack(L); printf("---------\n\n\n");
for (int i = 0; i < 10; ++i) {
addStack(&L, i);
}
printf("---------\n\n\n");
printStack(L);
printf("---------\n\n\n");
deleteStack(&L);
printStack(L);
}