首页 > 其他分享 >数据结构小学期第2天

数据结构小学期第2天

时间:2024-07-02 16:56:28浏览次数:1  
标签:00 include 中缀 int 小学 30 期第 数据结构 表达式

今日完成了小组分发的剩下两个题目

其一,老板的作息表

新浪微博上有人发了某老板的作息时间表,表示其每天 4:30 就起床了。但立刻有眼尖的网友问:这时间表不完整啊,早上九点到下午一点干啥了?

本题就请你编写程序,检查任意一张时间表,找出其中没写出来的时间段。

输入格式:
输入第一行给出一个正整数 N,为作息表上列出的时间段的个数。随后 N 行,每行给出一个时间段,格式为:

hh:mm:ss - hh:mm:ss
其中 hh、mm、ss 分别是两位数表示的小时、分钟、秒。第一个时间是开始时间,第二个是结束时间。题目保证所有时间都在一天之内(即从 00:00:00 到 23:59:59);每个区间间隔至少 1 秒;并且任意两个给出的时间区间最多只在一个端点有重合,没有区间重叠的情况。

输出格式:
按照时间顺序列出时间表中没有出现的区间,每个区间占一行,格式与输入相同。题目保证至少存在一个区间需要输出。

输入样例:
8
13:00:00 - 18:00:00
00:00:00 - 01:00:05
08:00:00 - 09:00:00
07:10:59 - 08:00:00
01:00:05 - 04:30:00
06:30:00 - 07:10:58
05:30:00 - 06:30:00
18:00:00 - 19:00:00
输出样例:
04:30:00 - 05:30:00
07:10:58 - 07:10:59
09:00:00 - 13:00:00
19:00:00 - 23:59:59

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int n;
 4 vector<pair<string,string>> q;
 5 int main(){
 6     cin>>n;
 7     while(n--){
 8         string a,b,c;
 9         cin>>a>>b>>c;
10         q.push_back({a,c});
11     }
12     q.push_back({"","00:00:00"});
13     q.push_back({"23:59:59",""});
14     sort(q.begin(),q.end());
15     int m=q.size();
16     for(int i=0;i<m-1;i++)
17         if(q[i].second !=q[i+1].first)
18             cout<<q[i].second<<" - "<<q[i+1].first<<endl;
19     return 0;
20 }

其二,

把题目给出中缀表达式转换为后缀表达式输出,并求后缀表达式的值。为简单起见,我们约定:1、输入的中缀表达式一定是合法的,并且只含数字,四种运算符+、-、*、/和小括号;2、运算数都是一位正整数(1~9);3、输入的中缀表达式不超过20个字符;4、除法运算的结果仍然是正整数。

输入格式:
输入的第一行是一个正整数 N ,表示以下有 N 行。每行是一个中缀表达式。为简单起见,我们约定:1、输入的中缀表达式一定是合法的,并且只含数字,四种运算符+、-、*、/和小括号;2、运算数都是一位正整数(1~9);3、输入的中缀表达式不超过20个字符;4、除法运算的结果仍然是正整数。

输出格式:
输出每行中缀表达式所对应后缀表达式,隔一个空格之后,输出该后缀表达式计算之后得到的值。

输入样例:
在这里给出一组输入。例如:

6
2+4
3+2*7
2*(4+6)
(5/2+4)*5+2
(3+5)*(7-2)/4
5*(8-(3+2))
输出样例:
在这里给出相应的输出。例如:

24+ 6
327*+ 17
246+* 20
52/4+5*2+ 32
35+72-*4/ 10
5832+-* 15

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<ctype.h>
 5 #include<stack>
 6 #include<string>
 7 #include<cstring>
 8 using namespace std;
 9 int calculate(int a,int b,char c)
10 {
11       switch(c)
12       {
13           case '+': return a+b;break;
14           case '-': return a-b;break;
15           case '*': return a*b;break;
16           case '/': return a/b;break;
17        } 
18 } 
19 int main()
20 {
21     stack<int> st;
22     stack<char> ch;
23     int n;
24     cin>>n;
25     getchar();
26     int t=0;
27     char ans[20]={'\0'}; 
28     while(n--){
29         string s;
30         t=0;
31         cin>>s;
32         for(int i=0;i<s.length();i++){
33               if(isdigit(s[i])){//数字 
34                   cout<<s[i];
35                   ans[t++] = s[i];
36             }
37             else{
38                 if(s[i] =='(')//左括号 
39                     ch.push(s[i]);
40                   else if(s[i] == ')'){//右括号开始输出 
41                       while(ch.top()!='('){
42                           cout<<ch.top();
43                           ans[t] = ch.top();
44                         t++; 
45                           ch.pop();
46                     }
47                     ch.pop();
48                 }
49                 else if(s[i]=='*'||s[i]=='/'){
50                       while(!ch.empty()&&(ch.top()=='*'||ch.top()=='/')){
51                           cout<<ch.top();
52                           ans[t++] = ch.top();
53                           ch.pop();
54                     }
55                     ch.push(s[i]);
56                 }
57                 else if(s[i]=='+'||s[i]=='-'){
58                     while(!ch.empty()&&ch.top()!='('){
59                           cout<<ch.top();
60                           ans[t++] = ch.top();
61                         ch.pop();    
62                     }
63                       if(ch.empty()||ch.top() == '('){
64                         ch.push(s[i]);
65                         continue; 
66                     }      
67                       
68                           
69                 }    
70             }
71         } 
72         while(!ch.empty()){
73               cout<<ch.top();
74               ans[t++] = ch.top();
75               ch.pop();
76         }    
77       cout<<" ";
78       for(int i=0;i<strlen(ans);i++)
79       {
80           if(isdigit(ans[i]))
81           st.push(ans[i]-'0');
82           else 
83           {
84               int x;
85             int y;
86               y=st.top();
87             st.pop();
88               x=st.top();
89               st.pop();
90               st.push(calculate(x,y,ans[i]));
91         }
92       }
93      cout<<st.top()<<endl; 
94      st.pop();
95      memset(ans,'\0',sizeof(ans)); 
96     }
97     return 0;    
98 }

 

标签:00,include,中缀,int,小学,30,期第,数据结构,表达式
From: https://www.cnblogs.com/Lyh3012648079/p/18280145

相关文章

  • PART1-Oracle关系数据结构
    2.Oracle关系数据结构2.1.表和表簇2.1.1.模式对象简介数据库模式是数据结构的逻辑容器,这些数据结构称为模式对象。模式对象的例子有表和索引。模式对象是通过SQL创建和操作的。一个数据库用户拥有密码和各种数据库权限。每个用户拥有一个与其同名的模式。模式包含了属于......
  • [JLU] 数据结构与算法上机题解思路分享-第二次上机
    前言首先,请务必自己尽全力尝试实现题目,直接看成品代码,思维就被拘束了,也很容易被查重。这里只是思路解析的博客,代码仓库在JLU_Data_Structures_Record希望你能在这里找到你想要的:)正文A二叉树的创建与遍历分数10作者朱允刚单位吉林大学通过带空指针信息的先根序列(......
  • 数据结构:期末考 第六次测试(总复习)
    一、单选题(共50题,100分)1、表长为n的顺序存储的线性表,当在任何位置上插入或删除一个元素的概率相等时,插入一个元素所需移动元素的平均个数为(D).(2.0)A、(n−1)/2B、nC、n+1D、n/22、设栈S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5和e6依次通过栈S,一个元素出栈后......
  • 【数据结构】常见的几种数据结构
    常见的数据结构:数组、链表、队列、栈、、堆、二叉树、B树、哈希表、图数组因为数组内的元素是连续存储的,所以数组中元素的地址,可以通过其索引计算出来。根据索引查找元素,时间复杂度是\(O(1)\)。动态数组动态数组具体代码实现importjava.util.Arrays;importjava.util.Ite......
  • 数据结构 —— Trie 树
    一个笔记需要一张头图:Trie树是一种维护(广义)字符串(我们认为广义字符串是一切可以被线性描述的类型,例如,我们认为整数(无论是哪种进制下)是一种广义字符串;有理数也是一种广义字符串(使用无限循环小数方式表述,可能需要一些特殊处理。))的数据结构,其特征为适于处理前缀类型或寻找类型(i.e.......
  • 【每日一练】python入门级小学生自写小程序
    """写一个公司发工资小程序条件分析:公司人数10人共有工资金2万元共有奖金1000元管理工资3000元/每人员工基本工资2000元/每人三年以上员工奖金200元/每人"""#先定义出公司人数总金额奖金gsrs=10jine=20000jiangjin=1000#获取职位层级人员print("""......
  • 探索数据结构:队列的的实现与应用
     ......
  • 堆数据结构
    堆(Heap)是一种特殊的树形数据结构,通常被实现为一个完全二叉树,以数组的形式存储。堆主要用于实现优先队列,它有两种基本形式:最大堆(MaxHeap)和最小堆(MinHeap)。特点完全二叉树:堆在逻辑上是一个完全二叉树,这意味着除了最后一层外,每一层的节点都是满的,并且最后一层的节点都靠左排列。......
  • 【408考点之数据结构】排序的基本概念
    排序的基本概念排序是计算机科学中的一个基本操作,目的是将一组无序的数据元素按照特定的顺序排列起来。排序在数据管理、检索和分析中有着广泛的应用,能够提高数据处理的效率和准确性。1.排序的定义排序(Sorting)是指将一组记录按某个关键字或多个关键字的大小关系进行排列......
  • 【408考点之数据结构】顺序查找和折半查找
    顺序查找和折半查找在数据处理中,查找操作是非常重要的一部分。顺序查找和折半查找是两种常见的查找方法,它们各有优缺点和适用场景。以下是对这两种查找方法的详细介绍。1.顺序查找定义:顺序查找(SequentialSearch),也称线性查找,是一种最简单、最直接的查找方法。它从数据集......