承接上次状态不佳整理的有关栈队列的总结
https://www.cnblogs.com/gaodiyuanjin/p/18424324
作补充 关于算法的实现 主要就是栈和队列的顺序存储和链式存储
顺序栈
| 初始化栈顶指针: |
| S.top=-1; |
| |
| bool Push(SqStack &S,ElemType x){ |
| if(S.top==MaxSize-1) |
| return false; |
| S.data[++S.top]=x; |
| return true; |
| } |
| |
| bool Pop(SqStack &S,ElemType x){ |
| if(S.top==-1) |
| return false; |
| x=S.data[S.top--]; |
| return true; |
| } |
链栈
| 不带头结点的链栈 |
| |
| bool Push(Stack *S, ElemType x) { |
| Node *p = (Node *)malloc(sizeof(Node)); |
| p->data = x; |
| p->next = S->top; |
| S->top = p; |
| return true; |
| } |
| |
| bool Pop(Stack *S, ElemType x) { |
| if (S->top == NULL) { |
| return false; |
| } |
| Node *p = S->top; |
| x = p->data; |
| S->top = p->next; |
| free(p); |
| return true; |
| } |
| |
| 带头结点的链栈 |
| |
| bool Push(Stack *S, ElemType x) { |
| Node *p = (Node *)malloc(sizeof(Node)); |
| p->data = x; |
| p->next = S->header->next; |
| S->header->next = p; |
| return true; |
| } |
| |
| bool Pop(Stack *S, ElemType x) { |
| if (S->header->next == NULL) { |
| return false; |
| } |
| Node *p = S->header->next; |
| x = p->data; |
| S->header->next = p->next; |
| free(p); |
| return true; |
| } |
| |
队列的顺序存储
| |
| bool Enqueue(SeqQueue *Q, ElemType x) { |
| if ((Q->rear + 1) % MaxSize == Q->front) { |
| return false; |
| } |
| Q->data[Q->rear] = x; |
| Q->rear = (Q->rear + 1) % MaxSize; |
| return true; |
| } |
| |
| |
| bool Dequeue(SeqQueue *Q, ElemType x) { |
| if (Q->front == Q->rear) { |
| return false; |
| } |
| x = Q->data[Q->front]; |
| Q->front = (Q->front + 1) % MaxSize |
| return true; |
| } |
| |
循环队列的顺序存储
| 初始化: |
| Q.rear=Q.front=0; |
| |
| 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; |
| return true; |
| } |
| |
| bool DeQueue(SqQueue &Q,ElemType &x){ |
| if(Q.rear==Q.front) |
| return false; |
| x=Q.data[Q.front]; |
| Q.front=(Q.front+1)%MaxSize; |
| return true; |
| } |
| |
队列的链式存储
| 带头结点 |
| 初始化: |
| Q.front=Q.rear=(LinkNode*)malloc(sizeof(LinkNode)); |
| Q.front->next=NULL; |
| |
| 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; |
| } |
| |
| 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; |
| } |
| |
| 不带头结点 |
| 初始化: |
| Q.front = NULL; |
| Q.rear = NULL; |
| |
| void EnQueue(LinkQueue &Q,ElemType x){ |
| LinkNode *s=(LinkNode*)malloc(sizeof(LinkNode)); |
| s->data=x; |
| s->next=NULL; |
| if(Q.rear == NULL){ |
| Q.front = s; |
| Q.rear = s; |
| }else{ |
| Q.rear->next=s; |
| Q.rear=s; |
| } |
| } |
| |
| bool DeQueue(LinkQueue &Q,ElemType x){ |
| if(Q.front==NULL) |
| return false; |
| LinkNode *p=Q.front; |
| x=p->data; |
| Q.front=p->next; |
| if(Q.front==NULL) |
| Q.rear=NULL; |
| free(p); |
| return true; |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?