evansyangs evansyangs
首页
分类
标签
归档
GitHub (opens new window)

Evan Yang

摸鱼小能手
首页
分类
标签
归档
GitHub (opens new window)
  • 王道数据结构2019代码
  • Ch2 线性表(p12)
  • Ch3 栈和队列(p58)
    • 3.1 栈(p58)
      • 3.1.2 顺序栈——栈的顺序存储(p59)
      • 3.1.3 栈的链式存储结构(p61)
    • 3.2 队列(p71)
      • 3.2.2 队列的顺序存储结构(p71)
      • 3.2.3 队列的链式存储结构(p74)
      • 3.3.3 栈在递归中的应用(p84)
  • Ch4 树与二叉树(p101)
  • Ch5 图(p177)
  • Ch6 查找(p234)
  • Ch7 排序(p282)
目录

Ch3 栈和队列(p58)

# 3.1 栈(p58)

# 3.1.2 顺序栈——栈的顺序存储(p59)

1.顺序栈的实现 栈的顺序存储类型可描述为

#define MaxSize 50                //定义栈中元素的最大个数
typedef struct{
    ElemType data[MaxSize];        //存放栈中元素
    int top;                    //栈顶指针
}SqStack;
1
2
3
4
5

2.顺序栈的基本运算

(1)初始化
void InitStack(&S){
    //初始化顺序栈
    s.top=-1;                    //初始化栈顶指针
}
(2)判断空
bool StackEmpty(S){
    //判断顺序栈是否为空
    if (S.top == -1)            //栈空
        return true;
    else                        //不空
        return false;
}
(3)进栈
bool Push(SqStack &S, ElemType x) {
    //顺序栈进栈操作
    if (S.top == MaxSize - 1)    //栈满,报错
        return false;
    S.data[++S.top] = x;        //指针先加1,再入栈
    return true;
}

bool Pop(SqStack &S, ElemType &x) {
    //顺序栈出栈操作
    if (S.top == -1)            //栈空,报错
        return false;
    x = S.data[S.top--];        //先出栈,指针再减1
    return true;
}

bool GetTop(SqStack S, ElemType &x) {
    //获取顺序栈栈顶元素
    if (S.top == -1)            //栈空,报错
        return false;
    x = S.data[S.top];            //x记录栈顶元素
    return true;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

# 3.1.3 栈的链式存储结构(p61)

栈的链式存储类型可描述为

typedef struct Linknode{
    ElemType data;                //数据域
    struct Linknode *next;        //指针域
}*LiStack;                        //栈类型定义
1
2
3
4

# 3.2 队列(p71)

# 3.2.2 队列的顺序存储结构(p71)

1.队列的顺序存储

#define MaxSize 50                //定义队列中元素的最大个数
typedef struct {                //顺序/循环队列定义
    ElemType data[MaxSize];        //存放队列元素
    int front, rear;            //队头指针和队尾指针
} SqQueue;
1
2
3
4
5

3.循环队列的操作

(1)初始化
void InitQueue(SqQueue &Q) {
    //初始化循环队列
    Q.rear = Q.front = 0;                //初始化队首、队尾指针
}
(2)判断空
bool isEmpty(SqQueue Q) {
    //判断循环队列是否为空
    if(Q.rear==Q.front) return true;    //队空条件
    else return false;
}
(3)入队
bool EnQueue(SqQueue &Q, ElemType x) {
    //循环队列的入队操作
    if ((Q.rear + 1) % MaxSize == Q.front) return false;//队满
    Q.data[Q.rear] = x;
    Q.rear = (Q.rear + 1) % MaxSize;        //队尾指针加1取模
    return true;
}
(4)出队
bool DeQueue(SqQueue &Q, ElemType &x) {
    //循环队列的出队操作
    if (Q.rear == Q.front) return false;    //队空,报错
    x = Q.data[Q.front];
    Q.front = (Q.front + 1) % MaxSize;      //队头指针加1取模
    return true;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# 3.2.3 队列的链式存储结构(p74)

1.队列的链式存储

typedef struct{                //链式队列结点
    ElemType data;
    struct LinkNode *next;
}LinkNode;
typedef struct {            //链式队列
    LinkNode *front, *rear;    //队列的对头和队尾指针
} LinkQueue;
1
2
3
4
5
6
7

2.链式队列的基本操作

(1)初始化
void InitQueue(LinkQueue &Q) {
    //初始化链式队列
    Q.front = Q.rear = (LinkNode *)malloc(sizeof(LinkNode));//建立头结点
    Q.front->next = NULL;    //初始化为空
}
(2)判断空
bool IsEmpty(LinkQueue Q) {
    //判断链式队列是否为空
    if(Q.front==Q.rear) return true;
    else return false;
}
(3)入队
void EnQueue(LinkQueue &Q, ElemType x) {
    //链式队列入队操作
    LinkNode *s = (LinkNode *)malloc(sizeof(LinkNode));
    s->data = x; s->next = NULL;        //创建新结点,插入到链尾
    Q.rear->next = s;
    Q.rear = s;
}
(4)出队
bool DeQueue(LinkQueue &Q, ElemType &x) {
    //链式队列出队操作
    if (Q.front == Q.rear) return false;//空队
    LinkNode *p = Q.front->next;
    x = p->data;
    Q.front->next = p->next;
    if (Q.rear == p)
        Q.rear = Q.front;       //若原队列中只有一个结点,删除后变空
    free(p);
    return true;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# 3.3.3 栈在递归中的应用(p84)

int Fib(n){
    if(n==0)
        return 0;
    else if(n==1)
        return 1;
    else
        return Fib(n-1)+Fib(n-2);
}
1
2
3
4
5
6
7
8
编辑 (opens new window)
#数据结构
上次更新: 2021/02/16, 02:45:37
Ch2 线性表(p12)
Ch4 树与二叉树(p101)

← Ch2 线性表(p12) Ch4 树与二叉树(p101)→

最近更新
01
Dell7472黑苹果
03-27
02
上手HackMD
04-13
03
Windows Terminal设置
03-14
更多文章>
Theme by Vdoing | Copyright © 2019-2023 Evan Yang
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式