数据结构必做题参考:实验一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是相当灵活的,用于执行计算机程序能完成的 ...
随机推荐
- Linux --xrandr command
Source: https://www.x.org/archive/current/doc/man/man1/xrandr.1.xhtml https://blog.csdn.net/syh_486_ ...
- 彻底搞懂 JS 中 this 机制
彻底搞懂 JS 中 this 机制 摘要:本文属于原创,欢迎转载,转载请保留出处:https://github.com/jasonGeng88/blog 目录 this 是什么 this 的四种绑定规 ...
- OpenCV数字识别
输入命令: conda install opencv 返回信息:
- ROS学习笔记6-理解主题
本文来源于:http://wiki.ros.org/ROS/Tutorials/UnderstandingTopics ROS主题假设turtlesim节点已经运行,打开一个新终端,使用如下命令运行键 ...
- Linux centosVMware 命令 lvm、磁盘故障小案例
一.lvm命令 LVM:逻辑分区管理,可基于动态的扩展缩小硬件设备的使用空间,注意:lvm磁盘复杂,由于使用lvm,数据丢失恢复起来有一定风险.概念:pv.VG.lvpv(物理卷,有pp基本单位构成) ...
- android EditText中inputType的属性列表
android 1.5以后添加了软件虚拟键盘的功能,所以在输入提示中将会有对应的软键盘模式 android中inputType属性在EditText输入值时启动的虚拟键盘的风格有着重要的作用.这也大大 ...
- php 实现店铺装修1
一.原型分析 1.店铺未装修的情况下,使用默认样式,哪个是默认样式由后台告知: 2.所有的样式由后台进行维护(但后台始终有一个默认样式,不可删除不可编辑),所有样式,只要用户未编辑过,则默认按照商品的 ...
- Linux 命令 - mknod
mknod 创建块设备或者字符设备文件.此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. 1.语法 mknod [选项] 设备名 设备类 ...
- sklearn中实现多分类任务(OVR和OVO)
sklearn中实现多分类任务(OVR和OVO) 1.OVR和OVO是针对一些二分类算法(比如典型的逻辑回归算法)来实现多分类任务的两种最为常用的方式,sklearn中专门有其调用的函数,其调用过程如 ...
- PHP7 源码整体框架
一.PHP7语言执行原理 常用的高级语言有很多种,根据运行的方式不同,大体分为两种:编译型语言和解释型语言. 编译是指在应用源程序执行之前,就将程序源代码“翻译”成汇编语言,然后进一步根据软硬件环境编 ...