实验一T1-10
#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的更多相关文章

  1. Reverse Linked List I&&II——数据结构课上的一道题(经典必做题)

    Reverse Linked List I Question Solution Reverse a singly linked list. Reverse Linked List I 设置三个指针即可 ...

  2. CODEVS 必做题:3149、2821、1531、3369、1230

    3149 爱改名的小融 2  时间限制: 2 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description Wikioi上有个人叫小融,他喜 ...

  3. Machine learning 吴恩达第二周coding作业(必做题)

    1.warmUpExercise: function A = warmUpExercise() %WARMUPEXERCISE Example function in octave % A = WAR ...

  4. 最小割 总结&&做题记录

    模型要点: 1.一般适用于二取一问题或者01规划. 2.利用最小割=最大流,转化为最大流求之. 建议阅读胡伯涛的论文 <<最小割模型在信息学竞赛的应用>>,有精彩有序的证明和各 ...

  5. CodeM美团点评编程大赛复赛 做题感悟&题解

    [T1] [简要题意]   长度为N的括号序列,随机确定括号的方向:对于一个已确定的序列,每次消除相邻的左右括号(右左不行),消除后可以进一步合并和消除直到不能消为止.求剩下的括号的期望.\(N \l ...

  6. 20175221 MyCP(课下作业,必做)

    MyCP(课下作业,必做) 任务详情 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: - java MyCP -tx XXX1.txt XXX2 ...

  7. 20172302《程序设计与数据结构》实验四Android程序设计实验报告

    课程:<程序设计与数据结构> 班级: 1723 姓名: 侯泽洋 学号:20172302 实验教师:王志强老师 实验日期:2018年5月30日 必修/选修: 必修 1.实验内容 (1)And ...

  8. [NOIP补坑计划]NOIP2012 题解&做题心得

    场上预计得分:100+90+70+100+100+3060=490520(省一分数线245) 题解: D1T1 Vigenère 密码 题面 水题送温暖~~ #include<iostream& ...

  9. C语言程序设计做题笔记之C语言基础知识(下)

    C 语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行 事.并且C是相当灵活的,用于执行计算机程序能完成的 ...

随机推荐

  1. LinkedList学习:API调用、栈、队列实现

    参考的博客 Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例 如果你想详细的区了解容器知识以及本文讲的LinkedList,我推荐你去看这篇博客和这个做个的容器系列 Lin ...

  2. 怎样实现android 返回到上一个Activity并重新执行一次onCreate方法

    1.onCreate 方法只在activity一开始创建的时候执行.2.也就是在该activity销毁后才能再次执行,假如当前activity上再打开一个activity,并且原来的activity已 ...

  3. 二十三、java连接oracle数据库操作:jdbc

    1.jdbc 1) 含义:JDBC是java语言连接数据库,Java Date Base Connectivity2) jdbc的本质:在编程时java程序会去连接不同的数据库,而每个数据库的底层的实 ...

  4. js保留两位小数的数字格式化方法

    // 格式化数字(保留两位小数) numberFormat (num) { let percent = Number(num.toString().match(/^\d+(?:\.\d{0,2})?/ ...

  5. 自定义sort排序

    java的sort自定义: 1.排序对象必须是封装类而不能是基本数据类型: 2.调用Arrays.sort(array, left, right, cmp)进行排序,array为数组,left.rig ...

  6. 手把手教你如何在Presentation中拿高分

    掐指一算,留学生们最近应该马上遇到Presentation作业.一般来说,这类的任务会占最终成绩的20-30%,对于期末成绩有一定的影响,如果想拿高分,就需要好好的准备.所以本文算是系列里的第一篇(扫 ...

  7. PWM与时间片思想

    改编自:http://www.moz8.com/thread-79049-1-1.html 什么是PWM? PWM:脉冲宽度调制,由于在数字电路(或者单片机)输出模拟信号的成本高昂,换句话说,受制于只 ...

  8. kali 中文乱码解决方法

    本文转自https://www.cnblogs.com/sym945/p/11943842.html#4449966 1.更换阿里源 vim /etc/apt/sources.list,编辑源之后,a ...

  9. vux 中 this.$vux.loading undefined 的问题

    时间:2018-04-03 摘要:this.$vux.loading 报 undefined 今天在使用 事件触发 vux 的 loading  组件时,发现无法触发成功,显示 undefined 然 ...

  10. 从三星官方uboot开始移植

    移植前的准备 下载 android_uboot_smdkv210.tar.bz2 这个文件 开始移植 本人使用的开发板是九鼎的 x210,在三星 uboot 的主 Makefile 中找到了类似的 s ...