这里是我之前写的东西的展示,不做为主要学习经验
前几个是学校图书管理系统
还有一个是导航系统

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
61
62
63
64
65
66
67
68
69
#ifndef BOOKMANAGE_H

#define BOOKMANAGE_H

#define MAXSIZE 10000



#include<string>

#include"status.h"

using namespace std;



//图书结构

typedef struct{

string isbn;

string name;

float price;

}Book



//图书列表 基于顺序表

typedef struct{

Book *book:

int length;

}SqBooklist;



typedef SqbookList BookList;



//创建空表

STATUS iniList(BookList &book_list);

//插入图书

status InsertBook(BookList &book_list,int i,Book book);

//查找 根据索引i

Status Getbook(BookList &book_list,int i,Book &book);

//查找 根据名称

int LocateBook(Booklist &book_list,string name);

//删除

Status DeletBook(BookList &book-list,int i,Book &book);



#endif
1
2
3
4
5
6
7
8
9
10
#ifndef STATUS_H
#define STATUS_H

#define OK 1
#define ERROR 0
#define OVERFLOW -2

typedef int Status;

#endif
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
61
62
63
#include<iostream>
#include<srring>
#include"bookManage.h"
using namespace std;
void PrintBookList(BookList book_list)
{
for(int i=0;i<book_list.length;i++)
{
Book book;
status status=GetBook(book_list,i+1,book);
if(status==OK)
{
cout<<"BOOK"<<i+1<<end1;
cout<<"[NAME]"<<book.name<<end1;
cout<<"[ISBN]"<<book.isbn<<end1;
cout<<"[PRICE]"<<book.price<<end1;
}
}
}
Status DeleteBookByName(BookList &book_list,string name,Book &book)
{
int index=LocateBook(book_list,name);
return DeletBook(book_list,index,book);
}
int main()
{
BookList booklist;
Status status=InitList(booklist);
if(status==OK)
{
for(int i;i<3;i++)
{
cout<<"===请输入第"<<i+1<<"本图书信息"<<end1;
}
Book book;
cout<<"[ISBN]";
getline(cin,book,isbn);
cout<<"[NAME]";
getline(cin,book,name);
cout<<"[PRICE]";
cin>>book.price;
cin.ignore();
InsertBook(booklist,booklist.length+1,book);
cout<<"图书总数为"<<booklist.length<<end1;
}
PrintBookList(booklist);
cout<<"==搜索和删除"<<end1;
cout<<"按图书名称进行删除";
string name;
getline(cin,name);
cout<<"尝试删除"<<name<<end1;
Book book_del;
if(DeleteBookByName(booklist,name,book_del))
{
cout<<book_del.name<<"已删除"<<end1;
PrintBookList(booklist);
}
else
{
cout<<"删除失败"<<name<<end1;
}
return 0;
}
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include"bookManage.h"

//创建空表
Status iniList(BookList &book_list);
{
book_list.books=new Book[MAXSIZE];/*new 开辟内存空间,和malloc作用是一样的,大小由MAXSIZE决定*/
if(book_list.books==NULL)//判断图书结构体是否为空
{
exit(OVERFLOW);
}
book_list.length=0;/*图书列表的长度初始化为0*/
return OK;
}
//插入图书(插到i前面)

Status InsertBook(BookList &book_list,int i,Book book);
{
if(i<1||i>book_list.length+1)
{
return ERROR;
}
if(book_list.length>=MAXSIZE)
{
return ERROR;
}
//为新元素腾出位置
for(int j=book_list.length-1;j>=i-1;j--)
{
book_list.books[j+1]=book_list.books[j];
}
//插入新元素
book_list.books[i-1]=book;
book_list.length++;
return OK;
}

//查找 根据索引i

Status Getbook(BookList &book_list,int i,Book &book);
{
if(i<1||i>book_list.length+1)
{
return ERROR;
}
//这里可以直接查找 为什么要-1?下标从零开始
book=book_list.books[i-1];
return OK;
}

//查找 根据名称

int LocateBook(Booklist &book_list,string name);
{
for(int i=0;i<book_list.length;i++)
{
if(book_list.books[i].name.compare(name)==0)
{
return i+1;
}
}
return OK;
}

//删除

Status DeletBook(BookList &book-list,int i,Book &book);
{
if(i<1||i>book_list.length+1)
{
return ERROR;
}
book=book_list.books[i-1];
for(int j=0;j<=book_list.length-1;j++)
{
book_list.books[j-1]=book_list.books[j];
}
book_list.length--;
return OK;
}
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
61
#include<stdio.h>

int a[101],n;

void quicksort(int left,int right)
{
//算法描述
//1、需要两个游标
//2、需要把数组中的第一个值作为参考值
//3、发生交换(两个游标碰面)
//4、递归调用

int i,j,temp,t;
if(left>right)
{
return;
}
temp=a[left];
i=left;
j=right;
while(i!=j)
{
//从右到左
while(a[j]>=temp&&i<j)
j--;
while(a[j]<=temp&&i<j)
i++;
if(i<j)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
//碰面后
a[left]=a[i];
a[i]=temp;
//left是什么位置,i-1是什么位置?
quicksort(left,i-1);
quicksort(i+1,right);
}

int main()
{
int i,j,t;
printf("请输入数组长度");
scanf("%d",&n);
printf("请输入数组内容");
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
quicksort(1,n);
printf("排序后");
for(i=1;i<=n;i++)
{
printf("%d",a[i]);
}
getchar();
return 0;
}
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stack>
#define INF 99999
#define M 20

int dist[M][M];
int path[M][M];
int Stack[M];
int top;
int counts;
int visited[M];
using namespace std;

struct vertex//景点信息结构体
{
int num;
char name[20];
char info[300];
};

struct maps
{
int n;
int m;
vertex v[M];
int edgs[M][M];
}g;//景点信息图结构体

void Creat_vertex()//创建景点信息
{
g.v[0].num=1;
strcpy_s(g.v[0].name,"一号学生公寓");
strcpy_s(g.v[0].info,"这是学生休息的地方");
g.v[1].num=2;
strcpy_s(g.v[1].name,"2号学生公寓");
strcpy_s(g.v[1].name,"这是学生休息的地方");
g.v[2].num=3;
strcpy_s(g.v[2].name,"东餐厅");
strcpy_s(g.v[2].name,"一个来了就不想走的地方");
g.v[3].num=4;
strcpy_s(g.v[3].name,"校门");
strcpy_s(g.v[3].info,"学校入口");
g.v[4].num=5;
strcpy_s(g.v[4].name,"一号教学楼");
strcpy_s(g.v[4].name,"这是同学们学习的地方");
g.v[5].num=6;
strcpy_s(g.v[5].name,"五号学生公寓");
strcpy_s(g.v[5].name,"这是学校第五座教学楼");
g.v[6].num=7;
strcpy_s(g.v[6].name,"图书馆");
strcpy_s(g.v[6].name,"藏书丰富,是同学们阅读学习的好去处");
g.v[7].num=8;
strcpy_s(g.v[7].name,"十栋信息工程学院楼");
strcpy_s(g.v[7].info,"计算机教学楼");
g.v[8].num=9;
strcpy_s(g.v[8].name,"男生宿舍");
strcpy_s(g.v[8].name,"休息生活区域");
g.v[9].num=10;
strcpy_s(g.v[9].name,"四号学生公寓");
strcpy_s(g.v[9].name,"学习的地方");
g.v[10].num=11;
strcpy_s(g.v[10].name,"广科湖");
strcpy_s(g.v[10].name,"人工湖");
}

void Creat_maps()//创建图
{
int i,j;
g.n=13;
g.m=18;
for(i=0;i<g.n;i++)
{
for(j=0;j<g.n;j++)
{
g,edgs[i][j]=INF;
}
}
g.edgs[0][1]=g.edgs[1][0]=500;//写入边的权值信息
g.edgs[0][2]=g.edgs[2][0]=500;//写入边的权值信息
g.edgs[0][7]=g.edgs[7][0]=500;//写入边的权值信息
g.edgs[1][3]=g.edgs[3][1]=500;//写入边的权值信息
g.edgs[1][4]=g.edgs[4][1]=500;//写入边的权值信息
g.edgs[2][7]=g.edgs[7][2]=500;//写入边的权值信息
g.edgs[2][10]=g.edgs[10][2]=500;//写入边的权值信息
g.edgs[3][4]=g.edgs[4][3]=500;//写入边的权值信息
g.edgs[4][5]=g.edgs[5][4]=500;//写入边的权值信息
g.edgs[4][6]=g.edgs[6][4]=500;//写入边的权值信息
g.edgs[5][6]=g.edgs[6][5]=500;//写入边的权值信息
g.edgs[5][8]=g.edgs[8][5]=500;//写入边的权值信息
g.edgs[6][8]=g.edgs[8][6]=500;//写入边的权值信息
g.edgs[6][12]=g.edgs[12][6]=500;//写入边的权值信息
g.edgs[6][7]=g.edgs[7][6]=500;//写入边的权值信息
g.edgs[8][9]=g.edgs[9][8]=500;//写入边的权值信息
g.edgs[9][11]=g.edgs[11][9]=500;//写入边的权值信息
g.edgs[10][11]=g.edgs[11][10]=500;//写入边的权值信息
}

void Search_info()//搜索景点信息
{
int i,n;
printf("广州科技职业技术大学的景点有:\n");
for(i=0;i<13;i++)
{
printf("%d:%s\n",g.v[i].num,g.v[i].name);
}
while(1)
{
printf("请输入你要查询的景点编号\n");
printf("按0退出\n");
scanf("%d",&n);
getchar();
if(n==0)
{
break;
}
else
if(n<0||n>13)
{
printf("输入有误,请重新输入\n");
continue;
}
else
{
//这里为什么用n-1,n-1代表了什么
printf("%d:%s\n",g.v[n-1].num,g.v[n-1].name);
printf("%s\n",g.v[n-1].info);
}
}
}

void Floyd()//弗洛伊德算法
{
//初始化两个矩阵
int i,j,k;
for(i=0;i<g.n;i++)
{
for(j=0;j<g.n;j++)
{
dist[i][j]=g.edgs[i][j];
if(i!j&&dist[i][j]<INF)
{
path[i][j]=i;
}
else
{
path[i][j]=-1;
}
}
}
//核心算法
for(k=0;k<g.n;k++)
{
for(i=0;i<g.n;i++)
{
for(j=0;j<g.n;j++)
{
if(dist[i][j]>(dist[i][j]+dist[k][j]))
{
dist[i][j]=dist[i][k]+dist[k][j];
}
}
}
}
return;
}

//打印从s节点开始,到e节点结束之间的路径
void Floy_print(int s,int e)//打印算法结果
{
if(path[s][e]==-1||path[s][e]==e||path[s][e]==s)
{
return;
}
else
{
Floy_print(s,path[s][e]);
printf("%s->",g.v[path[s][e]].name);//打印中间景点名
Floy_print(path[s][e],e);//将中间点作为起点继续打印路径
}

void Dfs_allpath(int s,int e)//深度优先,全路径
{
int dis=0;
int i,j;
Stack[top]=s;//定义了栈
top++;//起点
visited[s]=1;//标记入栈
for(i=0;i<g.n;i++)
{
if(g.edgs[s][i]>0&&g.edgs[s][i]!=INF&&!visited[i]))
{
//未被访问的点
if(i==e)//到达终点,需要打印路径
{
printf("第%d条路:",counts++);
for(j=0;j<top;j++)
{
printf("%s->",g.v[Stack[j]][Stack[j+1]];
if(j<top-1)
{
dis=dis+g.edgs[Stack[j]][Stack[j+1]];
}
dis=dis+g.edgs[Stack[top-1]][e];//加到终点
printf("%s\n",g.v[e].name);//打印
printf("总长度是:%dm\n\n",dis);//长度
}
}
else
{
Dfs_allpath(i,e);
top--;
visited[i]=0;
}
}
}
}

void Beatpath_Multispot()//最佳路径
{
}

void Dis_menu()//打印菜单
{
printf("\n");
printf(" ***********欢迎使用广州科技职业技术大学导游查询系统***********\n\n");
printf(" ***** 1.广科大景点信息查询 **********\n");
printf(" ***** 2.两景点之间最短路径查询 **********\n");
printf(" ***** 3.两景点之间所有路径查询 **********\n");
printf(" ***** 4.多景点访问路线查询 *********\n");
printf(" ***** 5.退出系统 ***********\n");
printf(" *************************************************\n");
return;
}

void Dis_map()//打印地图
{
printf(" *广科大校区景点地图一览*\n\n");
printf(" (10)七教 \n");
printf(" (6)五教 (9)三教 ◎----------| \n");
printf(" ◎ ◎-----------------| | \n");
printf(" |------------------|------------------| | \n");
printf(" (5)一教 (7)二教 | |-----------◎ \n");
printf(" ◎ ◎ (13)广科湖| (12)四教 \n");
printf(" (4)校门◎------|---------------------|--------◎ | | \n");
printf(" | | | | ◎------------| \n");
printf(" | | | (11)操场 \n");
printf(" | | ◎ | \n");
printf(" ◎1号学生公寓 (8)图书馆 | \n");
printf(" |-------------------------------| | \n");
printf(" | |---------(3)东餐厅 \n");
printf(" | ");
printf(" | \n");
printf(" ◎2号学生公寓 \n\n");
}

int main()//主函数
{
int i,n;
int start,ens;
Creat_vertex();
Creat_maps();
Dis_maps();
while(1)
{
Dis_menu();
printf("请输入需要操作的指令:\n");
scanf("%d",&n);
getchar();
if(n<1||n>5)
{
printf("输入有误,请重新输入\n");
continue;
}
else
{
if(n==1)
{
Search_info();
}
else
{
if(n==2)
{
Dis_maps();
printf("请输入起点的景点:\n");
scanf("%d",&start);
printf("请输入终点的景点:\n");
scanf("%d",&ends);
Floyd();
printf("从%s到%s最短距离是:%d\n",g.v[start-1].name,g.v[ends-1].name);
printf("%s->",g.v[start-1].name);
Floyd_print(start,ends-1);
printf("%s\n",g.v[[ends-1].name);
}
else
if(n==3)
{
Dis_maps();
counts=1;
printf("请输入起点的景点:\n");
scanf("%d",&start);
printf("请输入终点的景点:\n");
scanf("%d",&ends);




return 0;
}
二叉树的遍历
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include<stdio.h>
typedef struct node
{ int data1;
struct node *lchild;
struct node *rchild;
}BINTNODE, *BINTREE; /*定义二叉链表指针类型*/


createbintree(BINTREE *t) /*创建二叉树*/
{
int a;
scanf("%d",&a);
if(a==0)
*t=NULL;
else
{ *t=(BINTNODE*)malloc(sizeof(BINTNODE));
(*t)->data1=a;
createbintree(&(*t)->lchild);
createbintree(&(*t)->rchild);
}
}

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

typedef struct Node
{
char data;
struct Node *LChild;
struct Node *RChild;
} BiTNode,*BiTree;

void InitList(BiTree *l)
{
*l= (BiTree)malloc(sizeof(BiTNode));
(*l)->LChild = NULL;
(*l)->RChild = NULL;
}

void CreateBiTree(BiTree *bt)
{
char ch;
ch = getchar();
if (ch == ' ') *bt = NULL;
else
{
*bt = (BiTree)malloc(sizeof(BiTNode));
(*bt)->data = ch;
CreateBiTree(&((*bt)->LChild));
CreateBiTree(&((*bt)->RChild));
}
}

void PreOrder(BiTree root)
{
if (root != NULL)
{
printf("%c", root->data);
PreOrder(root->LChild);
PreOrder(root->RChild);
}
}

void InOrder(BiTree root)
{
if (root != NULL)
{
InOrder(root->LChild);
printf("%c", root->data);
InOrder(root->RChild);
}
}

void PostOrder(BiTree root)
{
if (root != NULL)
{
PostOrder(root->LChild);
PostOrder(root->RChild);
printf("%c", root->data);
}
}

int main()
{

BiTree bt;
InitList(&bt);
CreateBiTree(&bt);
PreOrder(bt);
printf("\n");
InOrder(bt);
printf("\n");
PostOrder(bt);
printf("\n");
system("pause");
}