实验一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. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 辅助类:"text-warning" 类的文本样式

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. 越南FCK批量拿站

    关键词:inurl:detail_product.asp?lang= /FCKeditor/_samples/asp/sample01.asp/FCKeditor/_samples/asp/sampl ...

  3. 回顾PHP:第一章:PHP基础语法(2)

    十.PHP常量和变量——用常量限制用户跳过某些文件(重要) 十.1常量在代码中定义.书写方式: define(常量名,常量值) 注:1.常量值只能为标量 2.常量名可以小写,但是通常大写 3.常量名可 ...

  4. PIL pip error

    结果显示: 提示——Could not find a version that satisfies the requirement PIL (from versions: )No matching d ...

  5. 标准模板库中的队列(queue)

    //C++数据结构与算法(第4版) Adam Drozdek 著  徐丹  吴伟敏<<清华大学出版社>> 队列容器默认由deque实现,用户也可以选择list容器来实现.如果用 ...

  6. 学习笔记:中国剩余定理(CRT)

    引入 常想起在空间里见过的一些智力题,这个题你见过吗: 一堆苹果,\(3\)个\(3\)个地取剩\(1\)个,\(5\)个\(5\)个地取剩\(1\)个,\(7\)个\(7\)个地取剩\(2\)个,苹 ...

  7. django静态文件处理

    django静态文件处理   从开始接接触python这门语言已有四年了,中间陆续的学习,又不断的忘记,所以基本上是没有系统的知识体系.但是挺喜欢这门简洁,强大的动态语言.最近自己私人有个项目要做,虽 ...

  8. 移动端web(1)

    引入        <meta name="viewport" content="wcodeth=device-wcodeth, initial-scale=1, ...

  9. 转,docker学习笔记

    一.Docker 简介 Docker 两个主要部件: Docker: 开源的容器虚拟化平台 Docker Hub: 用于分享.管理 Docker 容器的 Docker SaaS 平台 -- Docke ...

  10. 学习 Ansible Playbook,有这篇文章就够了!

    https://mp.weixin.qq.com/s?__biz=MzAwNTM5Njk3Mw==&mid=2247487361&idx=1&sn=b50327df2949e4 ...