编程实现队列入队出队操作
来源:互联网 发布:淘宝开个网店怎么经营 编辑:程序博客网 时间:2024/04/23 22:24
#include <tchar.h>#include <iostream>using namespace std;typedef struct student{int data;struct student * next; } node;typedef struct linkmyqueue{node *first;node *rear;} myqueue;node* create(){node *head, *p, *s;int x, cycle = 1;head = (node *)malloc(sizeof(node));p = head;while(cycle){cout << "please input the data: ";cin >> x;cout << endl;if( x != 0){s = (node *)malloc(sizeof(node));s->data = x;p->next = s;p = s;}else{cycle = 0;}}p->next = NULL;head = head->next;return head;}int length(node *head){int n = 0;node *p;p = head;while (p != NULL){p = p->next;n++;}return n;}void print(node *head){int n;node *p;p = head;n = length(head);cout << "There is " << n << " data in list\n" << endl;while(p != NULL){cout << p->data << " -> ";p = p->next;}cout << endl;}node *last(node *head){node *p;p = head;while(p->next != NULL)p = p->next;return p;}//队列的入队myqueue *insert(myqueue *HQ,int x){ node *s; s=(node *)malloc(sizeof(node)); s->data=x; s->next=NULL; if(HQ->rear==NULL) { HQ->first=s; HQ->rear=s; } else { HQ->rear->next=s; HQ->rear=s; } return (HQ);} //队列的出队myqueue *remove(myqueue *HQ){ node *p; if(HQ->first==NULL) printf("\n yichu"); else { p=HQ->first; if(HQ->first==HQ->rear) { HQ->first=NULL; HQ->rear=NULL;free(p); } else { HQ->first=HQ->first->next; free(p); } return (HQ); }}int _tmain(int argc, _TCHAR * argv[]){node *head, *end;myqueue *LQ;head = create();end = last(head);//获取尾节点指针print(head);LQ = (myqueue *)malloc(sizeof(myqueue));//给队列分配内存空间 LQ->first = head;LQ->rear = end;for (int i=1; i<=4; i++){LQ = insert(LQ, i);}print(head);for (i=1; i<=8; i++){LQ = remove(LQ);}print(LQ->first);return 0;}