# 第11周知识总结
标签(空格分隔): 未分类
计算机科学或软件工程的领域对栈与队列的四个操作有特定的名称:
栈:
push: 加入一个物件,入栈、推入、…;
pop: 取出一个物件,出栈、弹出、…;
top: 检查一个「特定」的对象,顶部、头部、…,
isEmpty: 和检查容器内有没有物件,为空、…。
队列:
enqueue: 加入一个物件,入队;
dequeue: 取出一个物件,出队;
head: 检查一个「特定」的对象,头部;
isEmpty: 和检查容器内有没有对象,为空。
栈和队列都是一种具有某些特性的线性表 (linear list),它们可使用固定数组、动态数组、单链线性表、或双链线性表来实现。
在 C 程序语言可使用动态数组 (dynamic array) 实现栈:
数据结构:
#define SEGMENT 50 // 栈元素每段长度。
typedef int ElemType; // 整数类型的元素。
typedef struct {
ElemType *elem; // 元素类型的动态数组指针,栈的容器位址。
int top; // 栈的顶部指针 (索引),初始值为 -1。
int capacity; // 栈内存容量,初始设定为一段元素的长度。
} Stack;
基本操作介面:
// 初始化栈。
void initial(Stack *); // 分配一段元素的长度,顶部指向 -1。
// 入栈,将一个元素推入栈中。
void push(Stack *, ElemType );
// 出栈,将一个元素从栈弹出;若栈为空的,返回 -1。
ElemType pop(Stack *);
// 查看顶部元素;若栈为空的,返回 -1。
ElemType top(Stack);
// 查看栈是否为空;为空,返回 1;否则,返回 0。
int is_empty(Stack);
// 查看栈的元素个数。(非基本操作)
int get_size(Stack);
// 将栈清空,栈的容量改为一段元素的长度。(非基本操作)
void clear(Stack *);
// 从底部到顶部打印栈的元素。(非基本操作)
void print_stack(Stack);