链式队列的基本操作
1 #include<stdio.h> 2 #include<stdlib.h> 3 typedef int ElemType; 4 //结点结构体 5 typedef struct node{ 6 ElemType data; 7 struct node *next; 8 }LinkQueueNode; 9 //头结点的前一个节点 10 typedef struct Node{ 11 LinkQueueNode *front; 12 LinkQueueNode *rear; 13 }LinkQueue; 14 //初始化结点 15 int CreateQueue(LinkQueue *L){ 16 LinkQueueNode *phead=(LinkQueueNode*)malloc(sizeof(LinkQueueNode)); 17 L->front=L->rear=phead; 18 L->front->next=NULL; 19 } 20 //入队操作 21 int InputQueue(LinkQueue *L){ 22 int n,m; 23 LinkQueueNode *pre=L->front; 24 25 printf("请输入你想入队的长度:"); 26 scanf("%d",&n); 27 for(int i=0;i<n;i++){ 28 LinkQueueNode *NewNode = (LinkQueueNode*)malloc(sizeof(LinkQueueNode)); 29 printf("请输入第%d个数字:",i+1); 30 scanf("%d",&m); 31 NewNode->data=m; 32 NewNode->next=NULL; 33 pre->next=NewNode; 34 L->rear->next=NewNode;//因为这个是动态的所以用rear不用front 35 L->rear=NewNode; 36 pre=pre->next; 37 } 38 } 39 //打印队列 40 int OutElem(LinkQueue *L){ 41 LinkQueueNode *pre=L->front; 42 LinkQueueNode *p=pre->next; 43 if(pre->next==NULL){ 44 return printf("队列中没有元素了!"); 45 } 46 while(p->next!=NULL){ 47 printf("%d ",p->data); 48 p=p->next; 49 }printf("%d ",p->data); 50 printf("\n"); 51 return printf("打印成功!\n"); 52 } 53 //出队操作 54 int DeleteLinkQueue(LinkQueue *L){ 55 LinkQueueNode *pre=L->front; 56 LinkQueueNode *p=pre->next; 57 pre->next=p->next;//p->next可能是空这种做法不严谨 58 if (L->rear = p) 59 { 60 L->rear = L->front; 61 printf("置空成功!"); 62 } 63 free(p); 64 return printf("出队成功!\n"); 65 } 66 int main(){ 67 LinkQueue L; 68 CreateQueue(&L); 69 InputQueue(&L); 70 OutElem(&L); 71 DeleteLinkQueue(&L); 72 OutElem(&L); 73 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现