链栈
1.链栈结构定义
1 2 3 4 5 6
| typedef int LSTDataType;
typedef struct StackNode { LSTDataType data; // 数据域 struct StackNode *next; // 指针域 } StackNode, *LinkStackPtr;
|
2.链栈初始化(即创建一个空栈)
1 2 3
| void InitStack(LinkStackPtr *top) { *top = NULL; }
|
3.判断栈是否为空(若为空则返回 1,否则返回 0)
1 2 3
| int IsEmpty(LinkStackPtr top) { return top == NULL; }
|
4.进栈(将元素 x 压入栈顶)
1 2 3 4 5 6
| void Push(LinkStackPtr *top, int x) { LinkStackPtr p = (LinkStackPtr)malloc(sizeof(StackNode)); // 为新元素分配内存空间 p->data = x; // 将元素 x 压入栈顶 p->next = *top; // 将新元素插入链表的头部 *top = p; }
|
5.出栈(删除栈顶元素并返回其值)
1 2 3 4 5 6 7 8 9 10 11 12
| int Pop(LinkStackPtr *top) { if (IsEmpty(*top)) { // 栈空,返回空值 printf("Stack is empty!\n"); return -1; } else { LinkStackPtr p = *top; // 备份栈顶指针 int x = p->data; // 取出栈顶元素 *top = p->next; // 删除栈顶结点 free(p); // 释放栈顶结点的存储空间 return x; // 返回栈顶元素的值 } }
|
6.获取栈顶元素
1 2 3 4 5 6 7 8
| int GetTop(LinkStackPtr top) { if (IsEmpty(top)) { // 栈空,返回空值 printf("Stack is empty!\n"); return -1; } else { return top->data; // 返回栈顶元素的值 } }
|
7.输出链栈中的元素
1 2 3 4 5 6 7 8 9 10 11 12
| void PrintStack(LinkStackPtr top) { if (IsEmpty(top)) { // 栈空,返回空值 printf("Stack is empty!\n"); } else { printf("Stack elements: "); while (top != NULL) { printf("%d ", top->data); top = top->next; } printf("\n"); } }
|