循环队列的顺序存储
#include#include #define MaxSize 10 typedef int QElemType; typedef struct{ //对循环队列的结点的结构体进行定义 QElemType data[MaxSize]; int front; //头指针指向队首元素 int rear; //尾指针指向队尾元素的下一个位置 }SqQueue; int InitQueue(SqQueue *Q){//初始化队列 Q->front=0; Q->rear=0; return 1; } int Length(SqQueue *Q){//求队列长度 int len=(Q->rear-Q->front+MaxSize)%MaxSize; return len; } int EnQueue(SqQueue *Q,QElemType e){//入队列 if(Length(Q)+1==MaxSize){ printf("队列已满,数值%d无法进入n",e); return 0; } Q->data[Q->rear]=e; Q->rear=(Q->rear+1)%MaxSize; return 1; } int DeQueue(SqQueue *Q,QElemType *e){//出队列 if(Q->rear==Q->front){ printf("队列已空,无法出队列n"); return 0; } *e=Q->data[Q->front]; Q->front=(Q->front+1)%MaxSize; return 1; } void Print(SqQueue *Q){ int i=0; printf("n"); if(Q->front>Q->rear){ while(Q->front+i==MaxSize){ printf("%d ",Q->data[Q->front+i]); i++; } i=0; while(i!=Q->rear){ printf("%d ",Q->data[i]); i++; } } else{ i=Q->front; while(i!=Q->rear){ printf("%d ",Q->data[i]); i++; } } printf("n"); } int main(){ SqQueue Q; InitQueue(&Q); do{ printf(" 请选择要进行的 *** 作: n"); printf(" 1 创建一个循环队列 2 入队 3 出队 4 打印 0 退出 n"); int select; scanf("%d", &select); if(select == 0) break; switch(select){ case 0: break; case 1: printf("要创建的循环队列长度为:"); int n;//要创建的循环队列长度 scanf("%d",&n); printf("请依次输入元素:"); int an; for(int i=0;i 循环队列的链式存储
#include#include using namespace std; //定义链队列 typedef struct Haha{ int data; struct Haha *next; }Haha, *que; typedef struct{ que front; que rear; }link; //对链队列初始化 void Init(link *q){ q->front = q->rear = (que)malloc(sizeof(Haha)); if(!(q->front)) exit(1); q->front->next = 0; } //插入新元素 void En(link *q, int e){ que p; p = (que)malloc(sizeof(Haha)); if(!p) exit(1); p->data = e; p->next = 0; q->rear->next = p; q->rear = p; } //删除队头元素 int de(link *q){ Haha *p; int e; if(q->front==q->rear) return -1; p = q->front->next; e=p->data; q->front->next = p->next; if(q->rear == p) q->rear = q->front; free(p); cout << e << endl; return 0; } //输出队列元素 void out(link *q){ Haha *r=q->front->next; while(r){ cout << r->data<<' '; r = r->next; } cout << endl; } //求队列长度 int len(link *q){ Haha *r=q->front->next; int s = 0; while(r){ r=r->next; s++; } return s; } int main(){ link Q; Init(&Q); do{ printf(" 请选择要进行的 *** 作: n"); printf(" 1 创建一个链队列 2 入队 3 出队 4 打印 0 退出 n"); int select; scanf("%d", &select); if(select == 0) break; switch(select){ case 0: break; case 1: printf("要创建的循环队列长度为:"); int n;//要创建的循环队列长度 scanf("%d",&n); printf("请依次输入元素:"); int an; for(int i=0;i 欢迎分享,转载请注明来源:内存溢出
评论列表(0条)