curch11 2021-06-16 11:21 采纳率: 50%
浏览 20
已采纳

c++数据结构题 那个大神能做一下

 

  • 写回答

2条回答 默认 最新

  • bostonAlen 2021-06-16 11:59
    关注
    // 队列的链式存储结构 
    #include <iostream>
    #include <fstream>
    using namespace std;
    
    #define OK 1
    #define ERROR 0
    #define OVERFLOW -1
    
    typedef char QElemType;
    typedef char SElemType;
    typedef int Status;
    
    // 队列链式存储结构类型
    typedef struct QNode {
    	QElemType data;
    	struct QNode *next;
    }QNode,*QueuePtr;
    
    typedef struct {
    	QueuePtr front;		// 队头指针
    	QueuePtr rear;		// 队尾指针
    }LinkQueue;
    
    // 初始化链队
    Status Init_Queue(LinkQueue &Q) {		// 构造空队列Q
    	Q.front = Q.rear = new QNode;		// 生成新结点作为头结点,队头和队尾指针指向此结点
    	Q.rear->next = NULL;			// 头结点的指针域设置为空
    
    	return OK;
    }
    
    // 入队
    Status EnQueue(LinkQueue &Q, QElemType e) { // 插入元素e作为Q链队的新的队尾元素
    	QueuePtr p;
    	p = new QNode; // 为入队元素分配结点存储空间,用指针p指向它
    	p->data = e;
    	p->next = NULL;
    	Q.rear->next = p;	// 将新结点插入到队尾1	
    	Q.rear = p;			// 修改队尾指针 
    
    	return OK;
    }
    
    // 出队
    Status DeQueue(LinkQueue &Q, QElemType &e) {
    	QueuePtr p;
    	if (Q.rear == Q.front)
    		return ERROR; // 若队列为空
    	p = Q.front->next;		// p指向队头元素
    	e = p->data;		// e保存队头元素的值
    	Q.front->next = p->next;  // 修改头指针
    	if (Q.rear == p)
    		Q.rear = Q.front;	// 最后一个元素被删除,队尾指针指向队头结点
    	delete p;
    
    	return OK;
    }
    
    // 获取队头元素
    SElemType GetHead_Queue(LinkQueue Q) {
    	if (Q.front != Q.rear)				// 队列非空
    		return Q.front->next->data;		// 返回队头元素的值,队头指针不变
    }
    
    // 删除队列
    void Del_Queue(LinkQueue *Q) {
        Q.front->next = NULL;
        Q.rear ->next = NULL;
        Q.front = Q.rear = NULL;
        Q = NULL;
    }
    
    int main()
    {
    	int flag = 0, choose;
    	LinkQueue Q;
    	QElemType e, j;
    	cout << "1.初始化链队  2.入队  3.读取队头元素  4.出队  5.清空队列 0.退出\n\n\n\n";
    	choose = -1;
    	while (choose != 0)
    	{
    		cout << "请选择链队操作项[0-5]:";
    		cin >> choose;
    		switch(choose) {
    		case 1:
    			if (Init_Queue(Q)) {
    				flag = 1;
    				cout << "链队初始化成功." << endl << endl;
    			}
    			else
    				cout << "链队初始化失败." << endl << endl;
    			break;
    
    		case 2: {
    			fstream file;
    			file.open("QNode.txt");
    			if (!file) {
    				cout << "文件打开失败.\n\n\n";
    				exit(ERROR);
    			}
    			if (flag) {
    				flag = 1;
    				cout << "链队入队元素依次为:\n";
    				while (!file.eof()) {
    					file >> j;
    					if (file.fail())
    						break;
    					else
    					{
    						EnQueue(Q, j);
    						cout << j << "  ";
    					}
    				}
    				cout << endl << endl;
    			}
    			else
    				cout << "链队未创建成功,请重检测.\n\n\n";
    			file.close();
    		}
    			break;
    
    		case 3:
    			if (flag != -1 && flag != 0)
    				cout << "链队队头元素为:" << GetHead_Queue(Q) << endl << endl;
    			else
    				cout << "链队中没有此数据元素" << endl << endl;
    			break;
    
    		case 4:
    			cout << "链队依次弹出的队头元素为:" << endl;
    			while (DeQueue(Q, e)) {
    				flag = -1;
    				cout << e << "  ";
    			}
    			cout << endl << endl << endl;
    			
    			break;
                    case 5:
                            Del_Queue(&Q);
                            if(!Q)
                                cout << "链队清空" << endl;
                            break;
    		}
    	}
    
    
    	return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀