链队列代码及应用
链队列代码
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <time.h> #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define TRUE 1 #define FALSE 0 typedef int Status; typedef int ElemType; typedef struct Qnode{ int data; struct Qnode *next; } Qnode,*Qlink; typedef struct { Qlink front; Qlink rear; } Queue; Status initQueue(Queue *Q){ Q->front = Q->rear = (Qlink)malloc(sizeof(Qnode)); Q->front->next = NULL; return OK; } Status isEmpty(Queue Q){ if(Q.front == Q.rear)return TRUE; else return FALSE; } Status enQueue(Queue *Q,ElemType e){ Qlink new = (Qlink)malloc(sizeof(Qnode)); new->data = e; new->next = NULL; Q->rear->next = new; Q->rear = new; return OK; } Status deQueue(Queue *Q,ElemType *e){ if(isEmpty(*Q))return ERROR; Qlink tmp = Q->front->next; Q->front->next = tmp->next; *e = tmp->data; if(Q->rear == tmp)Q->rear = Q->front; free(tmp); return OK; } Status destoryQueue(Queue *Q){ while(Q->front != NULL){ Q->rear = Q->front->next; free(Q->front); Q->front=Q->rear; } return OK; } int main(){ int val; char sel; Queue Q; initQueue(&Q); while(1){ printf("enter you choose[e|d|D]:"); sel = getchar(); if(sel == 'e'){ printf("enter value:"); scanf("%d",&val); enQueue(&Q,val); } else if(sel == 'd'){ deQueue(&Q,&val); printf("value is %d\n",val); sleep(1); } else if(sel == 'D'){ destoryQueue(&Q); } } }
判断是否为回文
#include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR 0 #define STACK_MAX 100 #define QUEUE_MAX 100 typedef char ElemType; typedef int Status; typedef struct{ ElemType * base; ElemType * top; } Stack; typedef struct{ ElemType *base; int front; int rear; } Queue; //**************************** // stack library //**************************** Status initStack(Stack *s){ s->base = (ElemType*)malloc(STACK_MAX * sizeof(ElemType)); s->top = s->base; return OK; } Status pushStack(Stack *s,ElemType e){ if(s->top - s->base ==STACK_MAX)return ERROR; *s->top=e; s->top++; return OK; } Status popStack(Stack *s,ElemType *e){ if(s->top - s->base == 0)return ERROR; *e = *(--s->top); return OK; } //**************************** // queue library //**************************** Status initQueue(Queue *q){ q->base = (ElemType*)malloc(QUEUE_MAX * sizeof(ElemType)); q->front = q->rear = 0; return OK; } Status enQueue(Queue *q,ElemType e){ if(q->rear+1%QUEUE_MAX==q->front)return ERROR; *(q->base + q->rear) = e; q->rear = q->rear+1%QUEUE_MAX; return OK; } Status deQueue(Queue *q,ElemType *e){ if((q->rear-q->front+QUEUE_MAX)%QUEUE_MAX==0) return ERROR; *e = *(q->base + q->front); q->front = (q->front+1)%QUEUE_MAX; return OK; } Status checkPalindrome(char *str){ char c1,c2; char *p = str; Stack S; Queue Q; //init initStack(&S); initQueue(&Q); //input while(*p!='\n'){ pushStack(&S,*p); enQueue(&Q,*p); p++; } //output while(S.top!=S.base){ popStack(&S,&c1); deQueue(&Q,&c2); if(c1!=c2)return ERROR; } return OK; } int main(){ char test[100]; printf("This is check sentence if it is palindarome\n"); printf("enter the Ctrl + C to exit programe\n"); while(1){ printf("enter a string:"); fgets(test,100,stdin); if(checkPalindrome(test)) printf("yes,it is\n"); else printf("no,it isn't\n"); } }
程序员最高境界:静若瘫痪,动若癫痫
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端