zoukankan      html  css  js  c++  java
  • 数据结构—顺序表,链表实现队列

    顺序表实现队列

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    #define maxsize 110
    #define OK 1
    #define ERROR 0
    #define OVERFLOW -2
    
    typedef int Status;
    typedef int QElemType;
    
    typedef struct {
    	QElemType *base;
    	int front ;
    	int rear;
    }SqQueue;
    
    Status InitQueue(SqQueue & Q) {
    	Q.base = new QElemType[maxsize];
    	if (!Q.base) exit(OVERFLOW);
    	Q.front = Q.rear = 0;
    	return OK;
    }
    
    int QueueLenght(SqQueue Q) {
    	return (Q.rear - Q.front + maxsize) % maxsize ;
    }
    
    Status EnQueue (SqQueue &Q ,QElemType e) {
    	if ( (Q.rear + 1 ) % maxsize == Q.front ) return ERROR;
    	Q.base[Q.rear] = e;
    	Q.rear = ( Q.rear + 1 ) % maxsize ;
    	return OK; 
    }
    
    Status DeQueue(SqQueue &Q ,QElemType &e) {
    	if ( Q.front == Q.rear ) return ERROR;
    	e = Q.base[Q.front];
    	Q.front = (Q.front + 1 ) % maxsize;
    	return OK;
    }
    
    Status GetHead(SqQueue Q) {
    	if ( Q.front != Q.rear ) {
    		return Q.base[Q.front];
    	}
    }
    
    void menu() {
    	printf( "1.初始化
    "
    			"2.插入元素
    "
    			"3.删除元素
    "
    			"4.取出队列长度
    "
    			"5.取出队顶元素
    "
    			"0.退出
    "
    	);
    }
    
    int main() {
    	menu();
    	int choose = -1 ,e ; 
    	SqQueue Q1;
    	while ( true ) {
    		printf("请输入你的选择 : 
    ");
    		cin >> choose;
    		switch (choose){
    			case 1:
    				InitQueue(Q1);
    				break;
    			case 2:
    				printf("请输入要插入的元素 : 
    ");
    				cin >> e;
    				if ( EnQueue(Q1 ,e ) ) {
    					printf("插入成功
    ");
    				} else {
    					printf("插入失败,队列已满
    "); 
    				} break; 
    			case 3:
    				if ( DeQueue(Q1 ,e ) ) {
    					printf("删除成功
    ");
    				} else {
    					printf("删除失败,队列以空
    ");
    				}
    				break;
    			case 4:
    				printf("队列长度为: %d
    ",QueueLenght(Q1));
    				break; 
    			case 5:
    				if ( QueueLenght(Q1) == 0 ) {
    					printf("error:队列以空
    ");
    				} else {
    					printf("队顶元素为 : %d
    " ,GetHead(Q1));
    				} 
    				break;
    			case 0: 
    				break;
    		}	
    		if ( choose == 0 ) break;
    	}
    	return 0;
    } 
    

    链表实现队列

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    #define OK 1
    #define ERROR 0
    
    typedef int QElemType;
    typedef struct QNode {
    	QElemType data;
    	struct QNode *next;
    }QNode ,*QueuePtr;
    typedef int Status ;
    
    typedef struct {
    	QueuePtr front;
    	QueuePtr rear;
    }LinkQueue;
    
    Status InitQueue(LinkQueue &Q) {
    	Q.front = Q.rear = new QNode;
    	Q.front->next = NULL;
    	return OK;
    }
    
    Status EnQueue (LinkQueue & Q ,QElemType e) {
    	QueuePtr p;
    	p = new QNode;
    	p->data = e;
    	p->next = NULL; Q.rear->next = p;
    	Q.rear = p;
    	return OK;
    }
    
    Status DeQueue(LinkQueue &Q ,QElemType e) {
    	QueuePtr p;
    	if ( Q.front == Q.rear ) return ERROR;
    	p = Q.front->next;
    	e = p->data;
    	Q.front->next = p->next;
    	if ( Q.rear == p ) Q.rear = Q.front;
    	delete p;
    	return OK;
    }
    
    QElemType GetHead(LinkQueue Q) {
    	if ( Q.front != Q.rear ) {
    		return Q.front->next->data;
    	}
    }
    
    void menu() {
    	printf(
    		"1.初始化
    "
    		"2.插入
    "
    		"3.删除
    "
    		"4.取队列顶
    "
    		"0.退出
    "
    	);
    }
    
    int main() {
    	menu(); 
    	LinkQueue Q1;
    	int choose ,e ;
    	while ( true ) {
    		printf("请输入你的选择 :");
    		cin >> choose ; cout << endl; 
    		switch ( choose ) {
    			case 1:
    				InitQueue(Q1);
    				break;
    			case 2:
    				printf("请输入你的要插入的元素 :");
    				cin >> e; cout << endl; 
    				EnQueue(Q1 ,e );
    				printf("插入成功
    ");
    				break;
    			case 3:
    				if(DeQueue(Q1 ,e )) {
    					printf("删除成功
    ");
    				} else {
    					printf("error:队列以空
    ");
    				}
    				break;
    			case 4:
    				printf("队列顶的元素为: %d
    ",GetHead(Q1));
    				break;
    			case 0:
    				break;
    		}
    		if ( choose == 0 ) break;
    	} 
    	return 0;
    }
    
  • 相关阅读:
    冲刺五
    ubuntu安装utorrent
    struts2中properties属性
    Hadoop下的word count程序
    导入svn项目时eclipse崩溃
    Struts2 中jsp直接跳转到action
    用eclipse开发hadoop程序
    ubuntu下安装java
    【橙色警报】最新盗qq号方式,连我这个老鸟都一不小心被骗了
    在ubuntu上安装hadoop(书和官方文档结合的)
  • 原文地址:https://www.cnblogs.com/Nlifea/p/11745923.html
Copyright © 2011-2022 走看看