隐藏页面特效

数据结构复习代码——链队基本操作的实现

1、链队基本操作的实现

#include<stdio.h> #include<assert.h> #include<malloc.h> #define EType int typedef struct QueueNode //队列节点结构体 { EType data; //节点数据域 struct QueueNode *next; //节点指针域 }QueueNode; typedef struct LinkQueue{ //队列结构体 QueueNode *front; //队列头指针 QueueNode *tail; //队列尾指针 }LinkQueue; void InitQueue(LinkQueue *Q); //队列初始化 void EnQueue(LinkQueue *Q,EType x); //入队操作 void ShowQueue(LinkQueue *Q); //输出队列---简单遍历队列 void DeQueue(LinkQueue *Q); //出队操作--头结点出队 EType GetHead(LinkQueue *Q); //获取队列首元素 int Length(LinkQueue *Q); //获取当前队列长度 void ClearQueue(LinkQueue *Q); //逐个清除队列节点 void DestroyQueue(LinkQueue *Q); //摧毁队列 bool QueueIsEmpty(LinkQueue *Q); //判空 void InitQueue(LinkQueue *Q) //队列初始化 { QueueNode *s = (QueueNode*)malloc(sizeof(QueueNode)); //为头结点分配内存空间 assert(s!=NULL); Q->front = Q->tail = s; //初始化头尾指针 s->next = NULL; //设置头结点指针 } void EnQueue(LinkQueue *Q,EType x) //入队操作 { QueueNode *s = (QueueNode*)malloc(sizeof(QueueNode)); //为新结点申请内存空间 assert(s!=NULL); s->data = x; //数据域赋值 s->next = NULL; //设置尾节点指向 Q->tail->next = s; //连接当前队列尾部节点,进行入队操作 Q->tail = s; //更新尾指针位置 } void ShowQueue(LinkQueue *Q) //输出队列---简单遍历队列 { QueueNode *p = Q->front->next; //获取队列头结点 printf("Front>"); while(p!=NULL) //遍历队列、获取队列各节点数据域 { printf("%d",p->data); p = p->next; } printf("<Tail"); printf("\n"); } void DeQueue(LinkQueue *Q) //出队操作--头结点出队 { if(Q->front == Q->tail) //判空 return; QueueNode *p = Q->front->next; //获取队列头结点 Q->front->next = p->next; //更新队列头结点 free(p); //释放队列头结点 if(p == Q->tail) //判断释放节点是否为当前队列的尾节点、更新队尾指针 Q->tail = Q->front; /* while(p!=NULL) { Q->front->next = p->next; free(p); p = Q->front->next; }*/ } EType GetHead(LinkQueue *Q) //获取队列首元素 { if(Q->front == Q->tail) return NULL; QueueNode *q = Q->front->next; EType p = q->data; return p; } int Length(LinkQueue *Q) //获取当前队列长度 { int len = 0; QueueNode *p = Q->front->next; while(p!=NULL) //简单遍历队列 { len++; //计数 p = p->next; } return len; } void ClearQueue(LinkQueue *Q) //逐个清除队列节点 { if(Q->front == Q->tail) return; QueueNode *p = Q->front->next; while(p!=NULL) { Q->front->next = p->next; free(p); //释放该节点 p = Q->front->next; } } void DestroyQueue(LinkQueue *Q) //摧毁队列 { ClearQueue(Q); free(Q->front); Q->front = Q->tail = NULL; } bool QueueIsEmpty(LinkQueue *Q) { return (Q->front==Q->tail); } int main() { LinkQueue Q; InitQueue(&Q); for(int i=1;i<10;i++) { EnQueue(&Q,i); } ShowQueue(&Q); DeQueue(&Q); ShowQueue(&Q); printf("Length = %d",Length(&Q)); return 0; }

 

2、顺序结构下实现队列的基本操作

#include<stdio.h> #include<assert.h> #include<malloc.h> #define ElemType int #define MAXSIZE 9 typedef struct Queue //队列节点结构体 { ElemType *base; //节点数据域 int front; //头指针 int rear; //尾指针 }Queue; void InitQueue(Queue *Q) //初始化 { Q->base = (ElemType*)malloc(sizeof(ElemType)*MAXSIZE); assert(Q->base != NULL); Q->front = Q->rear = 0; } void EnQueue(Queue *Q,ElemType x) //进队操作 { if(Q->rear >= MAXSIZE) return; Q->base[Q->rear] = x; Q->rear++; } void DeQueue(Queue *Q) //出队操作 { if(Q->front == Q->rear) return 0; ElemType p = Q->base[Q->front]; Q->front++; } ElemType GetHead(Queue *Q) //获取队头元素 { if(Q->front == Q->rear) return 0; ElemType p = Q->base[Q->front]; //Q->front++; return p; } int Length(Queue *Q) //获取队列长度 { int len = Q->rear - Q->front; return len; } void ClearQueue(Queue *Q) //清除队列 { Q->front = Q->rear = 0; } void DestroyQueue(Queue *Q) //摧毁队列 { free(Q->base); Q->base = NULL; } void ShowQueue(Queue *Q) //输出队列 { for(int i=Q->front;i<Q->rear;++i) { printf("%d ",Q->base[i]); } printf("\n"); } int main() { Queue Q; InitQueue(&Q); for(int i=1;i<4;i++) { EnQueue(&Q,i); } ShowQueue(&Q); DeQueue(&Q); ShowQueue(&Q); //printf("Length = %d",Length(&Q)); return 0; }

 


__EOF__

本文作者往心。
本文链接https://www.cnblogs.com/lx06/p/16397979.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   往心。  阅读(74)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示