博客作业

| 这个作业属于哪个班级 | C语言--网络2011/2012 |
| ---- | ---- | ---- |
| 这个作业的地址 | https://edu.cnblogs.com/campus/jmu/DS-Net20/homework/11895 |
| 这个作业的目标 | 学习栈和队列的结构设计及运算操作 |
| 姓名 | 张嘉骥 |

1..本章学习总结(3分)

1.1 栈
栈定义
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。

2.顺序栈

栈空条件:top=-1
进栈e操作:top++; 将e放在top处
进栈时top增1,出栈时top减1
退栈操作:从top处取出元素e; top--;

进栈Push(&s,e)
在栈不满的条件下,先将栈指针增1,然后在该位置上插入元素e。

出栈Pop(&s,&e)
在栈不为空的条件下,先将栈顶元素赋给e,然后将栈指针减1

取栈顶元素GetTop(s,&e)
在栈不为空的条件下,将栈顶元素赋给e。

栈的链式存储结构
采用链表存储的栈称为链栈,这里采用带头结点的单链表实现。

链栈四要素
1.栈空条件:s->next=NULL
2.栈满条件:不考虑
3.进栈e操作:将包含e的结点插入到头结点之后
4.退栈操作:取出头结点之后结点的元素并删除之
进栈
bool Push(SqStack& s, ElementType e)
{
if (s->top == MaxSize - 1)//如果栈为满的时候
return false;//返回错误
s->top++;
s->data[s->top] = e;
return true;
}
出栈
bool Pop(SqStack& s, ElementType& e)
{
if (s->top == -1)//栈为空的时候,返回false
return false;
e = s->data[s->top];//取栈顶元素
s->top--;//栈顶指针-1
return true;
}
初始化栈InitStack(&s)
建立一个空栈s。实际上是创建链栈的头结点,并将其next域置为NULL。
void InitStack(SqStack& s)
{
s = new Stack;
s->top = -1;
}
销毁栈
释放栈s占用的全部存储空间。
void DestroyStack(SqStack& s)
{
delete s;
}

判断栈是否为空StackEmpty(s)
栈S为空的条件是s->next==NULL,即单链表中没有数据结点。
1.3.1 队列的存储结构及操作
队列的概念和特点:

把进行插入的一端称做队尾(rear)。
进行删除的一端称做队首或队头(front)。
向队列中插入新元素称为进队或入队,新元素进队后就成为新的队尾元素。
从队列中删除元素称为出队或离队,元素出队后,其后继元素就成为队首元素。
队列的主要特点是先进先出,所以队列又被成为先进先出表。

队列的顺序存储结构
顺序队类型SqQueue定义如下:

typedef struct
{ ElemType data[MaxSize];
int front,rear; //队首和队尾指针
} SqQueue

顺序队四要素

  1. 队空条件:front = rear
  2. 队满条件:rear = MaxSize-1
  3. 元素e进队:rear++; data[rear]=e;
  4. 元素e出队:front++; e=data[front];

初始化队列InitQueue(q)
构造一个空队列q。将front和rear指针均设置成初始状态即-1值。

void InitQueue(SqQueue& q)
{
q = new Queue;
q->front = q->rear = -1;
}
链队组成:

存储队列元素的单链表结点
指向队头和队尾指针的链队头结点
链队四要素
队空条件:front=rear=NULL
队满条件:不考虑
进队e操作:将包含e的结点插入到单链表表尾
出队操作:删除单链表首数据结点
typedef struct qnode {
ElemType data;
struct qnode* next;
}QNode;

//链队列中头指针为指针类型
typedef struct
{
QNode* front;
QNode* rear;
}LinkQueue;

环形队列
把数组的前端和后端连接起来,形成一个环形的顺序表,即把存储队列元素的表从逻辑上看成一个环,称为环形队列或循环队列。
环形队列四要素:

队空条件:front = rear
队满条件:(rear+1)%MaxSize = front
进队e操作:rear=(rear+1)%MaxSize; 将e放在rear处
出队操作:front=(front+1)%MaxSize; 取出front处元素e;
typedef struct
{
ElemType data[MaxSize];
int front, rear;//队头和队尾指针
}Queue;

1.5 队列应用

1.6

posted @ 2020-10-25 19:30  2012张嘉骥  阅读(170)  评论(0编辑  收藏  举报