博客作业
| 这个作业属于哪个班级 | 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
顺序队四要素
- 队空条件:front = rear
- 队满条件:rear = MaxSize-1
- 元素e进队:rear++; data[rear]=e;
- 元素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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人