访问次数:

Wenji's blog
头部背景图片
WenJi's blog |
WenJi's blog |

基于链式存储结构的图书信息表的创建和输出

2018-09-27

描述
定义一个包含图书信息(书号、书名、价格)的链表,读入相应的图书数据来完成图书信息表的创建,然后统计图书表中的图书个数,同时逐行输出每本图书的信息。

输入
输入n+1行,其中前n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。最后第n+1行是输入结束标志:0 0 0(空格分隔的三个0)。其中书号和书名为字符串类型,价格为浮点数类型。

输出
总计n+1行,第1行是所创建的图书表中的图书个数,后n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔。其中价格输出保留两位小数。

样例输入1 复制
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00
0 0 0
样例输出1
8
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00

代码
LinkList p与LNode *p等价
L为头节点
pre是保存上一个节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define OK 1
using namespace std;
typedef struct
{
char no[20];
char name[50];
float price;
}Book;
typedef struct LNode
{
Book data;
struct LNode *next;
}LNode,*LinkList;
LinkList L;
LNode *pre;
bool InintList(LinkList &L)
{
L=new LNode;
L->next=NULL;
return OK;
}
int main()
{
int num=0;
InintList(L);
LNode *p=new LNode;
L->next=p;
while(scanf("%s%s%f",p->data.no,p->data.name,&p->data.price))
{

if(p->data.no[0]=='0'&&p->data.name[0]=='0'&&((p->data.price-0.0)<1e-6))
{
delete p;
break;
}
else
{
pre=p;
p->next=new LNode;
p=p->next;
num++;
}
}
pre->next=NULL;
cout<<num<<endl;
LNode *it=L->next;
while(it)
{
printf("%s %s %.2f\n",it->data.no,it->data.name,it->data.price);
it=it->next;
}
return 0;
}

今天接着吧

2018-09-27

这几天有点忙,但是不是说没有时间写blog,其实这几天还是有很多东西用
电脑记下来。所以今天会继续写一点。争取每天更新一点东西。
过去一直被拉着走,这次我想自己跑快点!
加油!

博客域名的使用

2018-09-24

DNS服务器
DNS(Domain Name Server,域名服务器)是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器。DNS中保存了一张域名(domain name)和与之相对应的IP地址 (IP address)的表,以解析消息的域名。
3.更改hexo

打开本地文件地址,在source文件夹下添加CHANGE文件(==注意 没有后缀名==),里面的内容为你的域名
然后在你的仓库的代码里面的setting里面进行custom domain 里面加入你的审核通过的域名
然后就可以了。还有你的阿里云里面的解析ip必须是ping了我的wenjishiwo.github.io获得的ip地址。
相关的具体操作阿里云解释的都很清楚。

阿里云免费DNS其实就是万网原来自带的DNS系统,阿里云把万网收入囊中后改了一下DNS网页中文名字,连域名也懒得换了,直接套用万网的根域名,加一个DNS的二级域名然后就成了阿里云DNS了,前不久开放给了所有用户使用,非万网的用户也可以注册使用。

阿里云免费DNS域名解析服务支持A、CNAME、NS、MX、TXT、SRV、AAAA、URL等解析类型,新增解析记录,实时生效的,提供联通、电信、移动、教育网和海外线路的智能解析,URL转发功能目前只支持网站有BA号且接入商是万网的域名转发需求。

总得来说,万网被阿里云新的推广策略和新的形象包装成功实现了转型,建议国内那些传统IDC商们赶紧学着阿里云的做法,否则再过几年就晚了。

万网的dns都是只能自家的域名用,自从阿里收购了万网之后.在很多方便都有很大的发展,而阿里云dns就是一大成果,虽然目前处于发展状态,跟腾讯的DNSPOD还是有稍许的差距,以后或许会更强大吧,自从腾讯收购了dnspod推出很多收费套餐后,新用户的解析功能越来越不中用了.本来还有几个域名在dnspod不小心删除重新添加之后什么功能都没个毛线了.反正功能上都差不多,还不如尝试下阿里云的dns解析功能.DNS解析本质上差距不是很大,阿里的提供有免费的短信提醒,对于中型甚至大型网站来说提醒还是很有用的,而且阿里云提供有免费的100G硬防.对于dnspod来说,记得好像是只要有针对DNS解析的攻击就直接停掉域名了.

还有一个腾讯云的相关操作,这个我就不在做相关的理解了
但是我可以提供相关的网址来进行更一步的学习。

dnspod是腾讯的,万网是阿里自带,dns服务器看你用哪个服务器帮你解析。

https://www.cnblogs.com/ryanleee/p/8274314.html

关于域名我还想再谈谈,就是之前我是再阿里云这个地方注册的域名。
dns服务器国内有两个提供支持,一个是腾讯dnspod,一个是万网自带,这个
万网就是阿里收购的dns服务器。
上面的链接说明用dnspod来解析的,然后配置一个@和www的,
意思是一个是wenji.site,一个是www.wenji.site
之后由于在github的wenjishiwo.github.io仓库设置的是wenji.site,
所以最后只能通过这个wen.site进行访问。
以后我会试试用www的能否修改。下次再更新。
发现没问题,修改后没问题。
也可以用www.wenji.site来访问了。

基于顺序存储结构的图书信息表的图书去重

2018-09-24

描述
出版社出版的任何一本图书的书号(ISBN)都是唯一的,即图书表中不允许包含书号重复的图书。定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据来完成图书信息表的创建(书号可能重复),然后进行图书的去重,即删除书号重复的图书(只保留第一本),最后输出去重后所有图书的信息。

输入
总计输入n+1行,其中,第一行是图书数目n,后n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格(书号可能重复)。其中书号和书名为字符串类型,价格为浮点数类型。

输出
总计输出m+1行(m≤n),其中,第一行是去重后的图书数目,后m行是去重后图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,其中价格输出保留两位小数。

样例输入1 复制
9
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00
样例输出1
8
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00

##这道题我写了一会,发现这道题有一个点易错。
就是去重的条件的限制,L.length到底在循环中
到底是-1还是不减,还有到底是<还是<=这个在条件
中是很重要的。还有由于L.length要不断更新,因为
这是很重要的一件事,不然没法做到所有的去重,不过
我仍然认为我这是一个最暴力的解法,并不聪明。
我是查到重之后,就进行一次前移。
以后有更好的方法我会更新。

正确的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include<cstdio>
#include<cstring>
#include<iostream>
#include<string>
#include<algorithm>
#include<cmath>
#define MAXSIZE 1000
#define OK 1
#define ERROR 0
using namespace std;
typedef struct
{
char no[20];
char name[50];
float price;
}Book;
typedef struct
{
Book *elem;
int length;
}SqList;
SqList L;
int N;
bool IninList(SqList &L)
{
L.elem = new Book[MAXSIZE];
if (!L.elem) exit(OVERFLOW);
L.length = N;
return OK;
}
int main()
{
cin>>N;
IninList(L);
for(int i=0;i<N;i++)
{
scanf("%s%s%f", L.elem[i].no, L.elem[i].name, &L.elem[i].price);
}
for(int i=0;i<L.length-1;i++)
{
Book book;
book=L.elem[i];
for(int j=i+1;j<L.length;j++)
{
if(strcmp(book.no,L.elem[j].no)==0)
{
for(int u=j;u<L.length-1;u++)
{
L.elem[u]=L.elem[u+1];
}
L.length--;
}
}
}
cout<<L.length<<endl;
for(int j=0;j<=L.length-1;j++)
printf("%s %s %.2f\n",L.elem[j].no,L.elem[j].name,L.elem[j].price);
delete[] L.elem;
return 0;
}

基于顺序存储结构的图书信息表的新图书的入库

2018-09-24

描述
定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据来完成图书信息表的创建,然后根据指定的待入库的新图书的位置和信息,将新图书插入到图书表中指定的位置上,最后输出新图书入库后所有图书的信息。

输入
总计n+3行。首先输入n+1行,其中,第一行是图书数目n,后n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。其中书号和书名为字符串类型,价格为浮点数类型。之后输入第n+2行,内容仅为一个整数,代表待入库的新图书的位置序号。最后输入第n+3行,内容为新图书的信息,书号、书名、价格用空格分隔。

输出
若插入成功:

输出新图书入库后所有图书的信息(书号、书名、价格),总计n+1行,每行是一本图书的信息,书号、书名、价格用空格分隔。其中价格输出保留两位小数。

若插入失败:

只输出以下提示:抱歉,入库位置非法!

样例输入1 复制
7
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
2
9787822234110 The-C-Programming-Language 38.00
样例输出1
9787302257646 Data-Structure 35.00
9787822234110 The-C-Programming-Language 38.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00

这道题最开始wa的时候,我以为是由于我没用英文,
最后发现是由于没注意到插入的次序,也就是先后移之后
在插入。而我先插入之后再后移,就会造成数据出现重复。

正确代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include<cstdio>
#include<cstring>
#include<iostream>
#include<string>
#include<algorithm>
#include<cmath>
#define MAXSIZE 1000
#define OK 1
#define ERROR 0
using namespace std;
typedef struct
{
char no[20];
char name[50];
float price;
}Book;
typedef struct
{
Book *elem;
int length;
}SqList;
SqList L;
int N;
bool IninList(SqList &L)
{
L.elem = new Book[MAXSIZE];
if (!L.elem) exit(OVERFLOW);
L.length = 0;
return OK;
}
int main()
{
cin>>N;
IninList(L);
for(int i=0;i<N;i++)
{
scanf("%s%s%f", L.elem[i].no, L.elem[i].name, &L.elem[i].price);
L.length++;
}
int position;
Book book;
cin>>position;
scanf("%s%s%f", book.no, book.name, &book.price);
if(position<1||position>(L.length+1))
cout<<"Sorry, the storage location is illegal!"<<endl;
else
{
L.length++;
for(int i=L.length-1;i>=position;i--)
{
L.elem[i]=L.elem[i-1];
}
L.elem[position-1]=book;
for(int j=0;j<L.length;j++)
printf("%s %s %.2f\n",L.elem[j].no,L.elem[j].name,L.elem[j].price);}
delete[] L.elem;
return 0;
}

基本编程知识(我不会的)

2018-09-24

##1
c++中数据类型的转换一般分为隐含转换和强制转换两种;
(1)隐含转换
算术运算符 关系运算符 逻辑运算符赋值运算符等二元运算符
要求两个运算符的类型一致,算术运算 关系运算中参与运算的
类型不一致时要进行隐含转换,原则是将低类型转化成高类型
(类型越高数据精度越高,double>float>unsigned long>long

int>short>char>)这种转化是电脑自动完成,是安全的,数据
精度没有损失;
(2)强制转换
一般涉及到将高类型转化成低类型时使用,不安全,可能在精度的
损失,有两种方法
1类型说明符(表达式)//c++强制转化符号
2(类型说明符)表达式 //c强制转化符号;
如 float z=7.56;
int a;
a=int(z);或a=(int)z;

##2
abs( )主要用于对求整数的绝对值,在“stdlib.h”(或 )头文件
里面。
而fabs( )主要是求精度要求更高的double ,float 型的绝对值,在头文件里。
两者在只#include时都可以使用。

##3
strcmp()
C/C++函数,比较两个字符串
设这两个字符串为str1,str2,
若str1==str2,则返回零;
若str1<str2,则返回负数;
若str1>str2,则返回正数。

基于顺序存储结构的图书信息表的排序

2018-09-24

描述
定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据完成图书信息表的创建,然后将图书按照价格降序排序,逐行输出排序后每本图书的信息。

输入
输入n+1行,前n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。最后第n+1行是输入结束标志:0 0 0(空格分隔的三个0)。其中书号和书名为字符串类型,价格为浮点数类型。

输出
总计n行,每行是一本图书的信息(书号、书名、价格),书号、书名、价格用空格分隔。其中价格输出保留两位小数。

样例输入1 复制
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00
0 0 0
样例输出1
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787302164340 Operating-System 50.00
9787822234110 The-C-Programming-Language 38.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257646 Data-Structure 35.00
9787302219972 Software-Engineer 32.00

这题我在dev和vs2010上交没问题,但是oj过不了,
发现我校是G++4.3版本,于是我在sort的插件cmp
里面加入const,于是代码就过了,
还有,就是scanf可以直接换成cin输入,测试没问题。

过的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include<cstdio>
#include<cstring>
#include<iostream>
#include<string>
#include<algorithm>
#define MAXSIZE 10000
#define OK 1
#define ERROR 0
#define OVERFLOW -2
using namespace std;
typedef struct
{
char no[20];
char name[50];
float price;
}Book;
typedef struct
{
Book *elem;
int length;
}SqList;
SqList L;
bool IninList(SqList &L)
{
L.elem=new Book[MAXSIZE];
if(!L.elem) exit(OVERFLOW);
L.length=0;
return OK;
}
int cmp(const Book &a,const Book &b)
{
if(a.price>b.price)
return 1;
else
return 0;
}
int main()
{
IninList(L);
int start=0;
while(scanf("%s%s%f",L.elem[start].no,L.elem[start].name,&L.elem[start].price))
{
if(L.elem[start].no[0]=='0'&&L.elem[start].name[0]=='0'&&(L.elem[start].price-0.0<1e-6))
break;
else
{
start++;
L.length++;
}
}
sort(L.elem,L.elem+L.length,cmp);
for(int i=0;i<=L.length-1;i++)
{
printf("%s %s %.2f\n",L.elem[i].no,L.elem[i].name,L.elem[i].price);
}
delete [] L.elem;
return 0;
}

基于顺序存储结构的图书信息表的创建和输出

描述
定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的
图书数据来完成图书信息表的创建,然后统计图书表中的图书个数,
同时逐行输出每本图书的信息。

输入
输入n+1行,其中前n行是n本图书的信息(书号、书名、价格),
每本图书信息占一行,书号、书名、价格用空格分隔,价格之后
没有空格。最后第n+1行是输入结束标志:0 0 0(空格分隔的三个0)
。其中书号和书名为字符串类型,价格为浮点数类型。

输出
总计n+1行,第1行是所创建的图书表中的图书个数,后n行是n本图书
的信息(书号、书名、价格),每本图书信息占一行,书号、书名、
价格用空格分隔。其中价格输出保留两位小数。

样例输入1 复制
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00
0 0 0
样例输出1
8
9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00

runtime代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include<cstdio>
#include<cstring>
#include<iostream>
#include<string>
#define MAXSIZE 10000
#define OK 1
#define ERROR 0
#define OVERFLOW -2
using namespace std;
typedef struct
{
char no[20];
char name[50];
float price;
}Book;
typedef struct
{
Book *elem;
int length;
}SqList;
SqList L;
bool IninList(SqList &L)
{
L.elem=new Book[MAXSIZE];
if(!L.elem) exit(OVERFLOW);
L.length=0;
return OK;
}
int main()
{
IninList(L);
char a[20];
char b[20];
float c;
int start=0;
while(scanf("%s%s%f",&a,&b,&c)&&strcmp(a,"0")&&strcmp(b,"0")&&c!=0)
{
strcpy(L.elem[start].no,a);
strcpy(L.elem[start].name,b);
L.elem[start].price=c;
L.length++;
start++;
}
cout<<L.length<<endl;
for(int i=0;i<=L.length-1;i++)
{
printf("%s %s %.2f\n",L.elem[i].no,L.elem[i].name,L.elem[i].price);
}
return 0;
}

经过分析,可能是处理的不够合理,一个点是strcmp,还有个精度(关于0)问题,
还有delete,,还有预定义OVERFLOE存在。最后这都不是主要问题,原来是b[20]开的
小了,不细心啊。原题是name[50],最后改了就能过了。

然后还有就是虽然改了就能过,但是写的还是不好,下面是最终的
严谨版本。不是说之前的思路有问题,只是代码吗,还是严谨点好。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include<cstdio>
#include<cstring>
#include<iostream>
#include<string>
#define MAXSIZE 10000
#define OK 1
#define ERROR 0
#define OVERFLOW -2
using namespace std;
typedef struct
{
char no[20];
char name[50];
float price;
}Book;
typedef struct
{
Book *elem;
int length;
}SqList;
SqList L;
bool IninList(SqList &L)
{
L.elem=new Book[MAXSIZE];
if(!L.elem) exit(OVERFLOW);
L.length=0;
return OK;
}
int main()
{
IninList(L);
int start=0;
while(scanf("%s%s%f",L.elem[start].no,L.elem[start].name,&L.elem[start].price))
{
if(L.elem[start].no[0]=='0'&&L.elem[start].name[0]=='0'&&(L.elem[start].price-0.0<1e-6))
break;
else
{
start++;
L.length++;
}
}
cout<<L.length<<endl;
for(int i=0;i<=L.length-1;i++)
{
printf("%s %s %.2f\n",L.elem[i].no,L.elem[i].name,L.elem[i].price);
}
delete [] L.elem;
return 0;
}

博客页面显示问题

2018-09-23

最新一条更新
就是如果hexo g的时候出现问题,也就是什么block,且在line x, column y报错
如果附近有—
那么就是由于—的问题,
—上面一行不能是数字,可以是字母或者没有,且必须单独成行。

更新一条:为了不让其自适应,也就是说博客内容的宽度
不要超过这个最大宽度,所以之后的博客都以之前的宽度
为准。
关于博客页面在移动端
和pc端的页面显示不全的解决方法真的非常搞笑的一件事情,我的博
客在移动端和pc端会出现非常大的差异。由于hexo自身渲染的原因,