数据结构学习 之 链表 练习 链表排序功能.(热身练习)
2009-06-24 02:29
585 查看
----非常火大.cao!去年的程序到今年竟然运行不成功 ,一个 排序问题搞到现在, ╮(╯▽╰)╭...可能不是当时的最终版本...
本来准备 结合 我的 上一次mysql 操作 练习 将数据 保存到 mysql 数据库 的; 没想到....
还没解决....
明天再说! 先洗澡睡觉...吃大亏了今天. ...
先介绍下基本功能:
一个用于存储学生基本信息 的 链表,实现在任意位置 添加,删除,修改,的功能,以及排序功能'
学生有是个属性: 学号,姓名,语文分数,数学分数;
--------------------------------------------------
1.按下'r'开始读取文件信息!
2..按下's'开始对其进行排序!
3.按下'a'开始添加信息!
4.按下'd'删除当前信息!
5.按下'e'修改当前信息!
6.按下'n'显示下一条信息!
7.按下'p'显示上一条信息!
8.按下'v'显示全部信息!
9.按下'w'开始写入所有信息!
10.按下'q'退出程序!
--------------------------------------------------
printf("\n\twarning:排序`写入操作需要先读文件或是写!\n");
排序功能:
---------------------------------------------
printf("\t\t1.按下数字0开始根据No进行排序!\n");
printf("\t\t2.按下数字1开始根据总分进行排序!\n");
printf("\t\t3.按下数字2开始根据数学进行排序!\n");
printf("\t\t4.按下数字3开始根据语文进行排序!\n");
printf("\t\t5.按下其他数字开始根据学号进行排序!\n");
printf("--\t---------------------------------------------\n");
文件结构:
main.c:主函数所在文件
menu.c:菜单显示功能文件
Read.c: 读取文件中学生信息功能的文件
Sort.c:排序功能文件
Student.c:学生信息操作基本文件;包括链表 添加 . 删除 .修改. 和 基本信息 显示功能
Write.c : 学生信息写操作
head.h :头文件
贴下源码(VS C++ 编译器 版本-- linux 环境 版本就不贴了):
1 //student.c 文件
2
3 #include<stdio.h>
4 #include"head.h"
5 #include<malloc.h>
6 #include<stdlib.h>
7 #include<stdafx.h>
8 #include <iostream>
9
10 void SetTempValue(struct Student *s)
11 {
12 printf("Input No:\t");
13 scanf("%s",&(s->No));
14
15 printf("Input Name:\t");
16 scanf("%s",&(s->Name));
17
18 printf("Input Maths:\t");
19 scanf("%d",&(s->Maths));
20
21 printf("Input Chi:\t");
22 scanf("%d",&(s->Chi));
23
24 }
25
26
27 struct Student * StudentInit(struct Student *s)
28 {
29 strcpy(s->No,"");
30 strcpy(s->Name,"");
31 s->Maths=0;
32 s->Chi=0;
33 s->Next=NULL;
34 s->Previous=NULL;
35 s->Next=s;
36 return s;
37 }
38
39
40
41 void set(struct Student *p,struct Student *s)
42 {
43 strcpy(p->No,s->No);
44 strcpy(p->Name,s->Name);
45 p->Maths=s->Maths;
46 p->Chi=s->Chi;
47 }
48
49
50 void Add(struct Student *s,struct Student *HL)
51 {
52 struct Student *newS = (struct Student *)malloc(sizeof(struct Student));
53 set(newS,s);
54 //exchange shit!
55 newS->Next=HL->Next;
56 newS->Previous = HL;
57 //注意
58 HL->Next->Previous=newS;
59
60 HL->Next = newS;
61 HL->Previous=NULL;
62 }
63
64 void DeleteThisOne(struct Student *s)
65 {
66 struct Student *L;
67 L=s->Previous;
68 L->Next=s->Next;
69 s->Next->Previous=L;
70 free(s);
71 }
72
73 void Edit(struct Student *des,struct Student *src)
74 {
75 strcpy(des->No,src->No);
76 strcpy(des->Name,src->Name);
77 des->Maths=src->Maths;
78 des->Chi=src->Chi;
79
80 }
81
82 void DisplayThisOne(struct Student *s)
83 {
84 printf("\tNo: %s\n",s->No);
85 printf("\tName: %s\n",s->Name);
86 printf("\tMaths: %d\n",s->Maths);
87 printf("\tChi: %d\n",s->Chi);
88 printf("\tChi: %d\n",s->Chi+s->Maths);
89 }
90
91 void DisplayAll(struct Student *head)
92 {
93 head=head->Next;
94 while(head->Previous!=NULL)
95 {
96 printf("\tNo: %s\n",head->No);
97 printf("\tName : %s\n",head->Name);
98 printf("\tMaths: %d\n",head->Maths);
99 printf("\tChi: %d\n",head->Chi);
printf("\tSum: %d\n",head->Chi+head->Maths);
printf("-------------------------------------------------------------\n");
head=head->Next;
}
}
main.c:↓
1 #include<stdio.h>
2 #include<malloc.h>
3 #include<stdlib.h>
4 #include <string.h>
5 #include <sstream>
6
7
8 #ifndef _head_h
9 #define _head_h
void ShowMenu();
void ShowSubMenu();
struct Student{
char No[20];
char Name[8];
int Maths;
int Chi;
struct Student *Next;
struct Student *Previous;
};
void SetTempValue(struct Student *s);
struct Student * StudentInit(struct Student *s);
void set(struct Student *p,struct Student *s);
void Add(struct Student *s,struct Student *HL);
void DeleteThisOne(struct Student *s);
void Edit(struct Student *NewS,struct Student *S);
void DisplayThisOne(struct Student *s);
void DisplayAll(struct Student *head);
void exchange(struct Student *p,struct Student *s);
struct Student* SortByNo(struct Student *s);
struct Student* SortByMaths(struct Student *s);
struct Student* SortByChi(struct Student *s);
struct Student* SortBySum(struct Student *s);
struct Student * Sort(int i,struct Student *s);
struct Student * StudentInit(struct Student *s);
void Read(struct Student *h);
void Write(struct Student *h);
好了代码贴完 收工!
本来准备 结合 我的 上一次mysql 操作 练习 将数据 保存到 mysql 数据库 的; 没想到....
还没解决....
明天再说! 先洗澡睡觉...吃大亏了今天. ...
先介绍下基本功能:
一个用于存储学生基本信息 的 链表,实现在任意位置 添加,删除,修改,的功能,以及排序功能'
学生有是个属性: 学号,姓名,语文分数,数学分数;
--------------------------------------------------
1.按下'r'开始读取文件信息!
2..按下's'开始对其进行排序!
3.按下'a'开始添加信息!
4.按下'd'删除当前信息!
5.按下'e'修改当前信息!
6.按下'n'显示下一条信息!
7.按下'p'显示上一条信息!
8.按下'v'显示全部信息!
9.按下'w'开始写入所有信息!
10.按下'q'退出程序!
--------------------------------------------------
printf("\n\twarning:排序`写入操作需要先读文件或是写!\n");
排序功能:
---------------------------------------------
printf("\t\t1.按下数字0开始根据No进行排序!\n");
printf("\t\t2.按下数字1开始根据总分进行排序!\n");
printf("\t\t3.按下数字2开始根据数学进行排序!\n");
printf("\t\t4.按下数字3开始根据语文进行排序!\n");
printf("\t\t5.按下其他数字开始根据学号进行排序!\n");
printf("--\t---------------------------------------------\n");
文件结构:
main.c:主函数所在文件
menu.c:菜单显示功能文件
Read.c: 读取文件中学生信息功能的文件
Sort.c:排序功能文件
Student.c:学生信息操作基本文件;包括链表 添加 . 删除 .修改. 和 基本信息 显示功能
Write.c : 学生信息写操作
head.h :头文件
贴下源码(VS C++ 编译器 版本-- linux 环境 版本就不贴了):
1 //student.c 文件
2
3 #include<stdio.h>
4 #include"head.h"
5 #include<malloc.h>
6 #include<stdlib.h>
7 #include<stdafx.h>
8 #include <iostream>
9
10 void SetTempValue(struct Student *s)
11 {
12 printf("Input No:\t");
13 scanf("%s",&(s->No));
14
15 printf("Input Name:\t");
16 scanf("%s",&(s->Name));
17
18 printf("Input Maths:\t");
19 scanf("%d",&(s->Maths));
20
21 printf("Input Chi:\t");
22 scanf("%d",&(s->Chi));
23
24 }
25
26
27 struct Student * StudentInit(struct Student *s)
28 {
29 strcpy(s->No,"");
30 strcpy(s->Name,"");
31 s->Maths=0;
32 s->Chi=0;
33 s->Next=NULL;
34 s->Previous=NULL;
35 s->Next=s;
36 return s;
37 }
38
39
40
41 void set(struct Student *p,struct Student *s)
42 {
43 strcpy(p->No,s->No);
44 strcpy(p->Name,s->Name);
45 p->Maths=s->Maths;
46 p->Chi=s->Chi;
47 }
48
49
50 void Add(struct Student *s,struct Student *HL)
51 {
52 struct Student *newS = (struct Student *)malloc(sizeof(struct Student));
53 set(newS,s);
54 //exchange shit!
55 newS->Next=HL->Next;
56 newS->Previous = HL;
57 //注意
58 HL->Next->Previous=newS;
59
60 HL->Next = newS;
61 HL->Previous=NULL;
62 }
63
64 void DeleteThisOne(struct Student *s)
65 {
66 struct Student *L;
67 L=s->Previous;
68 L->Next=s->Next;
69 s->Next->Previous=L;
70 free(s);
71 }
72
73 void Edit(struct Student *des,struct Student *src)
74 {
75 strcpy(des->No,src->No);
76 strcpy(des->Name,src->Name);
77 des->Maths=src->Maths;
78 des->Chi=src->Chi;
79
80 }
81
82 void DisplayThisOne(struct Student *s)
83 {
84 printf("\tNo: %s\n",s->No);
85 printf("\tName: %s\n",s->Name);
86 printf("\tMaths: %d\n",s->Maths);
87 printf("\tChi: %d\n",s->Chi);
88 printf("\tChi: %d\n",s->Chi+s->Maths);
89 }
90
91 void DisplayAll(struct Student *head)
92 {
93 head=head->Next;
94 while(head->Previous!=NULL)
95 {
96 printf("\tNo: %s\n",head->No);
97 printf("\tName : %s\n",head->Name);
98 printf("\tMaths: %d\n",head->Maths);
99 printf("\tChi: %d\n",head->Chi);
printf("\tSum: %d\n",head->Chi+head->Maths);
printf("-------------------------------------------------------------\n");
head=head->Next;
}
}
main.c:↓
1 #include<stdio.h>
2 #include<malloc.h>
3 #include<stdlib.h>
4 #include <string.h>
5 #include <sstream>
6
7
8 #ifndef _head_h
9 #define _head_h
void ShowMenu();
void ShowSubMenu();
struct Student{
char No[20];
char Name[8];
int Maths;
int Chi;
struct Student *Next;
struct Student *Previous;
};
void SetTempValue(struct Student *s);
struct Student * StudentInit(struct Student *s);
void set(struct Student *p,struct Student *s);
void Add(struct Student *s,struct Student *HL);
void DeleteThisOne(struct Student *s);
void Edit(struct Student *NewS,struct Student *S);
void DisplayThisOne(struct Student *s);
void DisplayAll(struct Student *head);
void exchange(struct Student *p,struct Student *s);
struct Student* SortByNo(struct Student *s);
struct Student* SortByMaths(struct Student *s);
struct Student* SortByChi(struct Student *s);
struct Student* SortBySum(struct Student *s);
struct Student * Sort(int i,struct Student *s);
struct Student * StudentInit(struct Student *s);
void Read(struct Student *h);
void Write(struct Student *h);
好了代码贴完 收工!
相关文章推荐
- 个人练习数据结构之--------------关于线性数据的有序数组以及之上的二分法查找、不同排序方法的学习
- 数据结构练习(01)把二元查找树转变成排序的双向链表
- python数据结构学习笔记-2016-11-26-01-链表排序
- 数据结构学习----线性表的链式表示之升序排序的单链表(Java实现)
- python数据结构学习笔记-2016-10-28-01-带尾指针的链表和排序链表
- 数据结构学习之路-第二章:双向链表
- 【算法学习笔记】07.数据结构基础 链表 初步练习
- C语言链表中数组实现数据选择排序,升序、降序功能主要难点
- 数据结构学习笔记 --- 排序(选择排序、堆排序)
- javascript数据结构之双链表插入排序实例详解
- 数据结构与算法学习笔记之 提高读取性能的链表(上)
- 数据结构入门学习系列-5(链表的基本操作算法)
- 【2015/11/15】 数据结构学习日志_Day16 链表 我的<LinkList.c>
- 数据结构之堆(java实现,有排序功能)
- 数据结构学习---链表的若干操作
- C语言数据结构 链表与归并排序实例详解
- 数据结构-链表排序总结
- 数据结构:链表 >> 链表按结点中第j个数据属性排序(冒泡排序法)
- 链表练习(数据结构线性表test2)
- 数据结构学习笔记3(链表 下 双向链表&单链表逆转)