第一题创建图书链表
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
输出:
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
代码:
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
#define OK 1
#define error 0
#define Maxsize 500
typedef struct
{
string IBNS;
string NAME;
float PRICE;
}Book;
typedef struct LNode
{
int length;
Book data;
struct LNode* next;
}LNode, * LinkList;
int InitList_L(LinkList& L);//链表初始化
int InsertList_L(LinkList& L);//创建新结点
int TraversalList_L(LinkList& L);//遍历并求表长
int PrintList_L(LinkList L);//打印函数
int main()
{
LinkList L;
InitList_L(L);
InsertList_L(L);
TraversalList_L(L);
PrintList_L(L);//打印函数
return 0;
}
int InitList_L(LinkList& L)//初始化链表
{
L = new LNode;
L->next = L;
return OK;
}
int InsertList_L(LinkList& L)//头插法
{
LinkList p = L;//p存储链表L的头指针,指向头结点
string IBNS;
string NAME;
float PRICE;
while (cin >> IBNS >> NAME >> PRICE)
{
if (IBNS == "0" && NAME == "0" && PRICE == 0)
break;
else//创建新结点
{
LinkList NewNode = new LNode;
NewNode->data.IBNS = IBNS;
NewNode->data.NAME = NAME;
NewNode->data.PRICE = PRICE;
NewNode->next = NULL;
p->next = NewNode;
p = NewNode;//p指向NewNode
}
}
return OK;
}
//遍历函数求表长
int TraversalList_L(LinkList& L)
{
LinkList p = L; //p储存头指针,指向头结点
L->length = 0;//将表长初始化为0
while (p->next)
{
L->length++;
p = p->next;
}
cout << L->length << endl;
return OK;
}
int PrintList_L(LinkList L)
{
LinkList p = L;//用指针p指向头结点
while (p->next)
{
cout << p->next->data.IBNS << " " << p->next->data.NAME << " " << fixed << setprecision(2) << p->next->data.PRICE << endl;
p = p->next;
}
return OK;
}
第二题 链表排序(根据价格)
#include<iostream>
#include<iomanip>
#include<string>
using namespace std;
#define OK 1
#define fault 0
#define Maxsize
typedef struct
{
string IBNS;
string NAME;
float PRICE;
}Book;
typedef struct LNode
{
int length;
Book data;
struct LNode* next;
}LNode,*LinkList;
int InitList(LinkList& L);
int InsertList(LinkList& L);
int TraveralList(LinkList& L);
int SortList(LinkList& L);
int PrintList(LinkList L);
int main()
{
LinkList L;
InitList(L);
InsertList(L);
TraveralList(L);
SortList(L);
PrintList(L);
}
int InitList(LinkList& L)
{
L = new LNode;
L->next = NULL;
return OK;
}
int InsertList(LinkList& L)
{
LinkList p = L;//用p存储链表L的头指针,p指向链表的头结点
string ibns;
string name;
float price;
while (cin >> ibns >> name >> price)
{
if (ibns == "0" && name == "0" && price == 0)
break;
else
{
LinkList q = new LNode;
q->data.IBNS = ibns;
q->data.NAME = name;
q->data.PRICE = price;
q->next = NULL;
p->next = q;//指针q在指针p的后面
p = q;//更新p,让p指向q
}
}
return OK;
}
int SortList(LinkList& L)
{
for (int i = 0; i < L->length - 1; i++)
{
LinkList p = L->next;//每轮排序都要从首元结点开始
Book t;
for (int j = 0; j < L->length - i - 1; j++)
{
if (p->data.PRICE < p->next->data.PRICE)
{
t = p->data;
p->data = p->next->data;
p->next->data = t;
}
p = p->next;
}
}
return OK;
}
int TraveralList(LinkList& L)
{
LinkList p = L;//头指针赋值给p,指向头结点
L->length = 0;
while (p->next)
{
L->length++;
p = p->next;
}
return OK;
}
int PrintList(LinkList L)
{
LinkList p = L;
while (p->next)
{
cout << p->next->data.IBNS << " " << p->next->data.NAME << " " <<fixed<<setprecision(2)<< p->next->data.PRICE << endl;
p = p->next;
}
return OK;
}
第三题 修改图书信息
定义一个包含图书信息(书号、书名、价格)的链表,读入相应的图书数据完成图书信息表的创建,然后计算所有图书的平均价格,将所有低于平均价格的图书价格提高20%,所有高于或等于平均价格的图书价格提高10%,最后逐行输出价格修改后的图书信息。
#include<iostream>
#include<string>
#include<iomanip>
#define OK 1
using namespace std;
typedef struct
{
string IBNS;
string NAME;
float PRICE;
}Book;
typedef struct LNode
{
int length;
Book data;
struct LNode* next;
}LNode,*LinkList;
int Init(LinkList& L);//初始化链表
int Insert(LinkList& L);//尾插法插入
int Traveral(LinkList& L);//遍历函数
int Print(LinkList L);
int Find(LinkList L);
int main()
{
LinkList L;
Init(L);
Insert(L);
Traveral(L);
Find(L);
//Print(L);
return 0;
}
int Init(LinkList& L)
{
L = new LNode;
L->next = NULL;
return OK;
}
int Find(LinkList L)
{
LinkList p = L->next;//定义头指针指向首元结点
int count = 0;
float max = L->data.PRICE;//将链表首元结点的价格赋给max
while (p->next)
{
if (max < p->next->data.PRICE)
max = p->next->data.PRICE;
p = p->next;
}
p = L->next;//指针p指向首元结点
while (p)
{
if (p->data.PRICE == max)
count++;
p = p->next;
}
cout << count << endl;
p = L->next;
while (p)
{
if(p->data.PRICE==max)
cout << p->data.IBNS << " " << p->data.NAME << " " << fixed << setprecision(2) << p->data.PRICE << endl;
p = p->next;
}
return OK;
}
int Insert(LinkList& L)//头插法
{
LinkList p = L;//p存储链表L的头指针,指向头结点
string IBNS;
string NAME;
float PRICE;
int n;
cin >> n;
while (n--)
{
LinkList NewNode = new LNode;
cin >> IBNS >> NAME >> PRICE;
NewNode->data.IBNS = IBNS;
NewNode->data.NAME = NAME;
NewNode->data.PRICE = PRICE;
NewNode->next = NULL;
p->next = NewNode;
p = NewNode;//p指向NewNode
}
return OK;
}
int Traveral(LinkList& L)
{
LinkList p = L;//定义头指针,指向头结点
L->length = 0;
while (p->next)
{
L->length++;
p = p->next;
}
return OK;
}
int Print(LinkList L)
{
LinkList p = L;//定义头指针指向头结点
while (p->next)
{
cout << p->next->data.IBNS << " " << p->next->data.NAME << " " << fixed << setprecision(2) << p->next->data.PRICE << endl;
p = p->next;
}
return OK;
}