#include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; typedef struct Qnode{ int data; Qnode *next; }Qnode,*QueuePtr; typedef struct{ QueuePtr fronts; QueuePtr rear; }LinkQueue; void creat(LinkQueue &a){ a.fronts=a.rear=(QueuePtr)malloc(sizeof(Qnode)); a.fronts->next=NULL; return ; } void enQueue(LinkQueue &a,int e){ QueuePtr p; p=(QueuePtr)malloc(sizeof(Qnode)); p->data=e; p->next=NULL; a.rear->next=p; a.rear=p; return ; } void DestroyQueue(LinkQueue &a){ while(a.fronts){ a.rear=a.fronts->next; free(a.fronts); a.fronts=a.rear; } } void deQueue(LinkQueue a,int &e){ if (a.fronts==a.rear)return; QueuePtr p; p=a.fronts->next; e=p->data; a.fronts->next = p->next; //if(a.rear==p)a.rear=a.fronts; free(p); return ; } int main(){ LinkQueue a; creat(a); enQueue(a,1); enQueue(a,2); DestroyQueue(a); int data; deQueue(a,data); printf("%d ",data); deQueue(a,data); printf("%d ",data); return 0; }
#include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; typedef struct Qnode{ int data; Qnode *next; }Qnode,*Queue; typedef struct {//相当于一个结构体指针,同时指向前面和后面 Queue fronts; Queue rear; }LinkQueue; void init(LinkQueue &Q){//建立一个新的节点 Q.fronts=Q.rear=(Queue)malloc(sizeof(Qnode)); Q.fronts->next=NULL; return ; } void delete_queue(LinkQueue &Q,int e){//删除这个节点 while(Q.fronts){//要是头结点仍然存在那么继续往后删除 Q.rear=Q.fronts->next; free(Q.fronts); Q.fronts=Q.rear;//再次移动 } } void inqueue(LinkQueue &Q,int e){//相当于链表的一样 Queue p=(Queue)malloc(sizeof(Qnode)); p->data=e; p->next=NULL; Q.rear->next=p; Q.rear=p; } void dequeue(LinkQueue &Q,int &e){ if (Q.fronts==Q.rear)return; Queue p=Q.fronts->next; e=p->data; Q.fronts->next=p->next; if(Q.rear==p)Q.rear=Q.fronts; free(p); return ; } int main(){ LinkQueue a; init(a); int n,tmp; scanf("%d",&n); for (int i=1;i<=n;i++){ scanf("%d",&tmp); inqueue(a,tmp); } int s; for (int i=1;i<=n;i++){ dequeue(a,s); printf("%d ",s); } return 0; }