数据结构必做题参考:实验一T1-20,实验2 T1
- #include <bits/stdc++.h>
- using namespace std;
- const int N=;
- struct Book
- {
- string isbn;
- string name;
- double price;
- }b[N],r[N];
- class book
- {
- private:
- string isbn;
- string name;
- double price;
- int length;
- book *next;
- static book *head;
- static book *tail;
- public:
- book():next(NULL)
- {
- head=tail=this;
- }
- book(string a,string b,double c):isbn(a),name(b),price(c),next(NULL){}
- void Input()
- {
- head->next=new book("","",-);
- tail=head->next;
- string a,b;
- double c;
- /*length=0;//T1-3
- while(cin>>a>>b>>c)
- {
- if(a=="0"&&b=="0"&&c==0)return;
- tail->next=new book(a,b,c);
- tail=tail->next;
- length++;
- }*/
- /*cin>>length;//T4-9
- for(int i=0;i<length;++i)
- {
- cin>>a>>b>>c;
- tail->next=new book(a,b,c);
- tail=tail->next;
- }*/
- }
- void Output()
- {
- cout<<length<<endl;//T1,10
- book *now=head->next;
- while(now->next)
- {
- now=now->next;
- cout<<now->isbn<<" "<<now->name<<" "<<now->price<<endl;
- }
- }
- void BubbleSort()
- {
- book *now;
- book *tmp1;
- book *tmp2;
- double temp1;
- string temp2,temp3;
- for(int i=;i<length;++i)
- {
- now=head->next->next;
- for(int j=;j<length-i;++j)
- {
- tmp1=now;
- tmp2=now->next;
- if(tmp1->price<tmp2->price)
- {
- temp1=tmp1->price;
- tmp1->price=tmp2->price;
- tmp2->price=temp1;
- temp2=tmp1->isbn;
- tmp1->isbn=tmp2->isbn;
- tmp2->isbn=temp2;
- temp3=tmp1->name;
- tmp1->name=tmp2->name;
- tmp2->name=temp3;
- }
- now=now->next;
- }
- }
- }
- void Sort(int s,int t)
- {
- if(s==t)return;
- int m=s+(t-s)/;
- Sort(s,m);
- Sort(m+,t);
- int i=s,j=m+,k=s;
- while(i<=m&&j<=t)r[k++]=b[i].price>=b[j].price?b[i++]:b[j++];
- while(i<=m)r[k++]=b[i++];
- while(j<=t)r[k++]=b[j++];
- for(int ii=s;ii<=t;++ii)b[ii]=r[ii];
- }
- void MergeSort()
- {
- int i=;
- book *now=head->next;
- while(now->next)
- {
- now=now->next;
- b[i].isbn=now->isbn;
- b[i].name=now->name;
- b[i++].price=now->price;
- }
- Sort(,length-);
- now=head->next;
- i=;
- while(now->next)
- {
- now=now->next;
- now->isbn=b[i].isbn;
- now->name=b[i].name;
- now->price=b[i++].price;
- }
- }
- void Update()
- {
- double sum=;
- book *now=head->next;
- while(now->next)
- {
- now=now->next;
- sum+=now->price;
- if(now->next==NULL)break;
- }
- sum/=length;
- cout<<sum<<endl;
- now=head->next;
- while(now->next)
- {
- now=now->next;
- now->price*=now->price<sum?1.2:1.1;
- if(now->next==NULL)break;
- }
- }
- void Inverse()
- {
- book *p=head->next;//头结点
- book *q=p->next;//首元节点
- book *t;
- while(q!=NULL)
- {//依次调整链表指针指向
- t=q->next;
- q->next=p;
- p=q;
- q=t;
- }
- head->next->next->next=NULL;//调整链表尾和头
- head->next->next=p;//
- }
- void inverse()
- {
- book *pre=NULL;
- book *cur=head->next->next;
- book*curnext=cur->next;
- while(cur!=NULL)
- {//依次调整链表指针指向
- cur->next=pre;
- pre=cur;
- cur=curnext;
- if(curnext!=NULL)curnext=curnext->next;
- }
- head->next->next=pre;//调整头结点
- }
- void QueryMax()
- {
- book *now=head->next;
- double mmax=;
- int num=;
- while(now->next)
- {
- now=now->next;
- if((now->price)>mmax)
- {
- mmax=now->price;
- num=;
- }
- else if(now->price==mmax)
- {
- num++;
- }
- }
- now=head;
- cout<<num<<endl;
- while(now->next)
- {
- now=now->next;
- if(now->price==mmax)
- {
- cout<<now->isbn<<" "<<now->name<<" "<<now->price<<endl;
- }
- }
- }
- void findfond()
- {
- int m;
- cin>>m;
- for(int i=;i<m;++i)
- {
- string name;
- cin>>name;
- book *now=head->next;
- int num=;
- while(now->next)
- {
- now=now->next;
- if(now->name==name)num++;
- }
- if(num==)
- {
- cout<<"Sorry,there is no your favourite!"<<endl;
- }
- else
- {
- cout<<num<<endl;
- now=head->next;
- while(now->next)
- {
- now=now->next;
- if(now->name==name)
- {
- cout<<now->isbn<<" "<<now->name<<" "<<now->price<<endl;
- }
- }
- }
- }
- }
- void Query()
- {
- int m;
- cin>>m;
- for(int i=;i<m;++i)
- {
- int num;
- cin>>num;
- if(num<||num>length)
- {
- cout<<"Sorry,the book on the best position doesn't exist!"<<endl;
- }
- else
- {
- book *now=head->next;
- while(num--)
- {
- now=now->next;
- }
- cout<<now->isbn<<" "<<now->name<<" "<<now->price<<endl;
- }
- }
- }
- void Insert()
- {
- int pos;
- string a,b;
- double c;
- cin>>pos>>a>>b>>c;
- if(pos<||pos>length+)
- {
- cout<<"Sorry,the position to be inserted is invalid!"<<endl;
- }
- else
- {
- book *now=head->next;
- while(--pos)now=now->next;
- book *t=new book(a,b,c);
- t->next=now->next;
- now->next=t;
- length++;
- Output();
- }
- }
- void Delete()
- {
- int pos;
- cin>>pos;
- if(pos<||pos>length)
- {
- cout<<"Sorry,the position to be deleted is invalid!"<<endl;
- }
- else
- {
- book *now=head->next;
- while(--pos)now=now->next;
- book *t=now->next->next;
- delete now->next;
- now->next=t;
- length--;
- Output();
- }
- }
- void Unique()
- {
- head->next=new book("","",-);
- tail=head->next;
- string a,b;
- double c;
- cin>>length;
- int num=;
- for(int i=;i<length;++i)
- {
- cin>>a>>b>>c;
- int flag=;
- book *now=head->next;
- while(now->next)
- {
- now=now->next;
- if(now->isbn==a)
- {
- flag++;
- num++;
- break;
- }
- }
- if(flag)continue;
- tail->next=new book(a,b,c);
- tail=tail->next;
- }
- length-=num;
- Output();
- }
- }List;
- book *book::head;
- book *book::tail;
- int main()
- {
- cout<<fixed<<setprecision();
- //List.Input();//T1-9
- //List.BubbleSort();//T2
- //List.MergeSort();//T2
- //List.Update();//T3
- //List.Inverse();//T4
- //List.inverse();//T4
- //List.Output();//T1-4
- //List.QueryMax();//T5
- //List.findfond();//T6
- //List.Query();//T7
- //List.Insert();//T8
- //List.Delete();//T9
- //List.Unique();//T10
- return ;
- }
实验一T11-20
- #include <bits/stdc++.h>
- using namespace std;
- struct Stack1
- {
- double a[];
- int top;
- void init(){top=;}
- void push(double x){a[++top]=x;}
- void pop(){top--;}
- int Size(){return top;}
- double query(){return a[top];}
- }opnd;
- struct Stack2
- {
- char a[];
- int top;
- void init(){top=;}
- void push(char x){a[++top]=x;}
- void pop(){top--;}
- int Size(){return top;}
- char query(){return a[top];}
- }optr;
- inline bool isnum(char a)
- {
- if((a>=''&&a<='')||a=='.')return true;
- else return false;
- }
- inline double cal(char a,double b,double c)
- {
- if(a=='+')return b+c;
- else if(a=='-')return b-c;
- else if(a=='*')return b*c;
- else return b/c;
- }
- inline void opt()//从符号栈弹出一个数,数栈弹出两个数进行计算,将得到的数重新压回数栈
- {
- char a=optr.query();
- optr.pop();
- double c=opnd.query();
- opnd.pop();
- double b=opnd.query();
- opnd.pop();
- opnd.push(cal(a,b,c));
- }
- char s[];
- int main()
- {
- cout<<fixed<<setprecision();
- while(~scanf("%s",s))//将整个字符串读入方便处理
- {
- optr.init();//栈初始化
- opnd.init();
- if(s[]=='=')break;
- int len=strlen(s);
- for(int i=;i<len;++i)
- {
- if(isnum(s[i]))//如果读到数字,将其拼成一个double类型的数,如果是一位数可直接入栈
- {
- double tmp1=,tmp2=,t=;
- int flag=;
- for(int j=i;j<len;++j)
- {
- if(isnum(s[j]))
- {
- if(s[j]=='.')
- {
- flag=;
- continue;
- }
- if(flag==)
- {
- tmp1*=;
- tmp1+=(s[j]-'');
- }
- else
- {
- t*=0.1;
- tmp2+=(s[j]-'')*t;
- }
- }
- else
- {
- i=j-;
- break;
- }
- }
- opnd.push(tmp1+tmp2);
- }
- else if(s[i]=='+'||s[i]=='-')//读入的符号为+-
- {
- if(optr.Size())//如果符号栈不为空才能从数栈弹出2个数进行运算
- {
- char a=optr.query();
- while(a=='+'||a=='-'||a=='*'||a=='/')//将将高于*/优先级的符号(即先压入符号栈的+-*/)全部弹出进行计算
- {
- opt();
- if(optr.Size())a=optr.query();
- else break;//符号栈为空跳出
- }
- }
- optr.push(s[i]);
- }
- else if(s[i]=='*'||s[i]=='/')//读入的符号为*/
- {
- if(optr.Size())//如果符号栈不为空才能从数栈弹出2个数进行运算
- {
- char a=optr.query();//将高于*/优先级的符号(即先压入符号栈的*/)全部弹出进行计算
- while(a=='*'||a=='/')
- {
- opt();
- if(optr.Size())a=optr.query();
- else break;//符号栈为空跳出
- }
- }
- optr.push(s[i]);
- }
- else if(s[i]=='(')optr.push(s[i]);//左括号直接压入栈中
- else if(s[i]==')')//右括号不入栈,一直弹出运算直到弹出左括号
- {
- while(optr.query()!='(')opt();
- optr.pop();//弹出左括号
- }
- }
- while(optr.Size())opt();//将符号栈全部弹出,此时数栈应只剩一个数
- cout<<opnd.query()<<endl;//输出中缀算术表达式的结果
- }
- return ;
- }//程序默认输入的是正确的中缀算术表达式,如果要判断是否错误,可以通过检查栈是否越界来实现
实验二T1
上述代码已全部在OJ上编译通过。有不足或者不懂的地方可以留言交流。
数据结构必做题参考:实验一T1-20,实验2 T1的更多相关文章
- Reverse Linked List I&&II——数据结构课上的一道题(经典必做题)
Reverse Linked List I Question Solution Reverse a singly linked list. Reverse Linked List I 设置三个指针即可 ...
- CODEVS 必做题:3149、2821、1531、3369、1230
3149 爱改名的小融 2 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description Wikioi上有个人叫小融,他喜 ...
- Machine learning 吴恩达第二周coding作业(必做题)
1.warmUpExercise: function A = warmUpExercise() %WARMUPEXERCISE Example function in octave % A = WAR ...
- 最小割 总结&&做题记录
模型要点: 1.一般适用于二取一问题或者01规划. 2.利用最小割=最大流,转化为最大流求之. 建议阅读胡伯涛的论文 <<最小割模型在信息学竞赛的应用>>,有精彩有序的证明和各 ...
- CodeM美团点评编程大赛复赛 做题感悟&题解
[T1] [简要题意] 长度为N的括号序列,随机确定括号的方向:对于一个已确定的序列,每次消除相邻的左右括号(右左不行),消除后可以进一步合并和消除直到不能消为止.求剩下的括号的期望.\(N \l ...
- 20175221 MyCP(课下作业,必做)
MyCP(课下作业,必做) 任务详情 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: - java MyCP -tx XXX1.txt XXX2 ...
- 20172302《程序设计与数据结构》实验四Android程序设计实验报告
课程:<程序设计与数据结构> 班级: 1723 姓名: 侯泽洋 学号:20172302 实验教师:王志强老师 实验日期:2018年5月30日 必修/选修: 必修 1.实验内容 (1)And ...
- [NOIP补坑计划]NOIP2012 题解&做题心得
场上预计得分:100+90+70+100+100+3060=490520(省一分数线245) 题解: D1T1 Vigenère 密码 题面 水题送温暖~~ #include<iostream& ...
- C语言程序设计做题笔记之C语言基础知识(下)
C 语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行 事.并且C是相当灵活的,用于执行计算机程序能完成的 ...
随机推荐
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:按钮大小
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- SSH Secure Shell 编码设置-----支持中文
参考:https://www.cnblogs.com/hupf/p/6920323.html #vi /etc/sysconfig/i18n 将内容改为 LANG="zh_CN.GB1803 ...
- 机器学习(ML)十一之CNN各种模型
深度卷积神经网络(AlexNet) 在LeNet提出后的将近20年里,神经网络一度被其他机器学习方法超越,如支持向量机.虽然LeNet可以在早期的小数据集上取得好的成绩,但是在更大的真实数据集上的表现 ...
- Vim学习1移动光标
vim adventure上面做了大量练习,是个好软件只是需要收费 HJKLWBE 首先HJKL分别是移动上下左右的 H:光标左移 J:下移 K:上移 L:右移 W:跳转到下一个单词的第一个字,注意是 ...
- 前端学习笔记系列一:7 在vscode中根据vue等模板生成代码
目标:希望每次新建.vue文件后,VSCODE能够根据配置,自动生成我们想要的内容. 方法:打开VSCODE编辑器,依次选择“文件 -> 首选项 -> 用户代码片段”,此时,会弹出一个搜索 ...
- JdbcTemplate常用方法
JdbcTemplate简介 JdbcTemplate是Spring JDBC的核心类,借助该类提供的方法可以很方便的实现数据的增删改查. Spring对数据库的操作在jdbc上面做了深层次的封装,使 ...
- 十四 数据库连接池&DBUtils
关于数据库连接池: 1 数据库的连接对象创建工作,比较消耗性能. 2 一开始在内存中开辟一块空间,往池子里放置多个连接对象,需要连接的时候从连接池里面调用, 使用完毕归还连接,确保连接对象能够循环利用 ...
- 连接数据库 - (mysql-thinkphp) (2)
1.现在conf里面写好选择的数据库 选择好了以后 2.在index里面输入 查询mysql数据库里面的表tables_priv的所有数据 public function index() { $res ...
- C语言三种整数类型
1,int 是 C 语言的基本整数类型,可以满足我们处理一般数据的需求. C 语言还提供了四个可以修饰 int 的关键字:short.long.signed,以及 unsigned. 利用这四个关键字 ...
- windows清理命令
总是有一些设备需要清理,第三方的软件有不可以安装,那么,就需要这两条命令来做: cleanmgr /sageset:99 #设置要被清理的东西 cleanmgr /sagerun:99 #执行清理操作 ...