#include "LinkedList.h"
typedef struct LinkedStack {
LinkedList list;
} *LinkedStack; // struct LinkedStack* -> LinkedStack
// 初始化
LinkedStack stackInitiation() {
LinkedStack stack = (LinkedStack) malloc(sizeof (struct LinkedStack));
stack->list = initiation();
if (stack == NULL) {
perror("LinkedStack initiation failed");
exit(-1);
}
return stack;
}
// 获取栈大小
int stackGetSize(LinkedStack st)
{
return getSize(st->list);
}
// 判断栈是否空
int stackIsEmpty(LinkedStack st)
{
return isEmpty(st->list);
}
// 入栈
void push(int e, LinkedStack st)
{
addLast(e, st->list);
}
// 查看栈顶
int peek(LinkedStack st)
{
return getLast(st->list);
}
// 出栈
int pop(LinkedStack st)
{
return removeLast(st->list);
}
// 销毁栈
void stackDestroy(LinkedStack st) {
destroy(st->list);
free(st);
st = NULL;
if (st == NULL) {
printf("The linkedStack has successfully been destroyed.");
} else {
perror("LinkedStack destroy failed");
exit(-1);
}
}
// 打印栈
void stackToString(LinkedStack st)
{
printf("Stack: size = %d\n", st->list->size);
Node cur = st->list->head;
while (cur != NULL) {
printf("%d->", cur->e);
cur = cur->next;
}
printf("NULL top\n");
}
int main() {
puts("******LinkedList******");
LinkedList list = initiation();
for (int i = 0; i < 10; i ++) {
addLast(i, list);
toString(list);
if (i % 3 ==2) {
removeFirst(list);
toString(list);
}
}
destroy(list);
puts("\n******LinkedStack******");
LinkedStack s = stackInitiation();
for (int i = 0; i < 10; i ++) {
addLast(i, s->list);
stackToString(s);
if (i % 3 ==2) {
removeLast(s->list);
stackToString(s);
}
}
stackDestroy(s);
return 0;
}
复用之前的链表操作。