c语言进阶8-数据结构
一、 数据结构的起源:
- 1. 为什么要学习数据结构
阿基米德说过:“给我一个支点,我就能翘起地球”。那么给我一个程序,我就能用好程序,给我一个结构,我就能把内容填充完成。打个比方,一个excel表,如果已经有了结构只是填数据,就很简单了,谁都可以去填数据.那么你是要做建结构的那个人还是去填数据的那个人呢?不言而语,我们要做的是那个建结构的人。那么怎么给程序搭建好数据的结构?那么就来学习数据结构吧!
所以数据结构的意义通过在前人大量实践总结得出的一系列解决问题的公用基本元素,学习数据结构,对数学建模会有很大的好处,对程序设计也会有很大的好处。
- 2. 什么是数据结构
数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。记为:
Data_Structure=(D,R)
其中D是数据元素的集合,R是该集合中所有元素之间的关系的有限集合
二、 基本概念和术语
我们知道了什么 数据结构!那么数据结构中数据是什么样的数据,还有其它我们要知道的基本概念有哪些,以及一些专用术语有哪些,我们先来看一个表。《学生成绩表》
学号 |
姓名 |
职位 |
性别 |
数学 |
英语 |
语文 |
总成绩 |
1 |
刘琳 |
班委 |
女 |
50 |
61 |
56 |
167 |
2 |
张华 |
班委 |
男 |
60 |
60 |
54 |
174 |
3 |
张三 |
学生 |
男 |
66 |
62 |
52 |
180 |
4 |
陈露 |
班委 |
男 |
93 |
54 |
62 |
209 |
5 |
李明 |
班委 |
女 |
56 |
45 |
88 |
189 |
6 |
李讲 |
班委 |
女 |
99 |
56 |
65 |
220 |
- 1. 数据
数据:是能被计算机识别,并输入给计算机处理的符号集合。
数据不仅仅包括整型、实型等数值类型,还包括字符及声音、图像、视频等非数值类型。
- 2. 数据元素
数据元素:是数据的的基本单位,也被称为记录。
- 3. 数据项
数据项:一个数据元素可以由若干个数据项组成。数据项是数据不可分割的最小单位。
比如学生这样的数据元素,也可以有姓名、年龄、性别、出生地址、联系电话等数据项,具体有哪些数据项,要根据你做的系统来决定。
- 4. 数据对象
数据对象:是性质相同的数据元素的集合,是数据的子集。
什么叫性质相同呢,是指数据元素具有相同数量和类型的数据项,比如,还是刚才的例子,人都有姓名、生日、性别等相同的数据项。既然数据对象是数据的子集,在实际应用中,处理的数据元素通常具有相同性质,在不产生混淆的情况下,我们都将数据对象简称为数据。好了,有了这些概念的铺垫,我们的主角登场了。说了数据的定义,那么数据结构中的结构又是什么呢?
- 5. 数据结构
我们已经知道了数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
在计算机中,数据元素并不是孤立、杂乱无序的,而是具有内在联系的数据集合。数据元素之间存在的一种或多种特定关系,也就是数据的组织形式。为编写出一个“好”的程序,必须分析待处理对象的特性及各处理对象之间存在的关系。这也就是研究数据结构的意义所在。定义中提到了一种或多种特定关系,具体是什么样的关系,这正是我们下面要讨论的问题。逻辑结构与物理结构
(1) 逻辑结构
逻辑结构:是数据元素之间的相互关系。其实这也是我们今后最需要关注的问题。逻辑结构分为以下四种:
① 集合结构
集合结构:集合结构中的数据元素除了同属于一个集合外,它们之间没有其他关系。各个数据元素是“平等”的,它们的共同属性是“同属于一个集合”。数据结构中的集合关系就类似于数学中的集合(如图1-5-1所示)。
图1-5-1.
② 线性结构
线性结构:线性结构中的数据元素之间是一对一的关系(如下图1-5-2所示)。
③ 树形结构
树形结构:树形结构中的数据元素之间存在一种一对多的层次关系(如图1-5-3所示)。
④ 图形结构
图形结构:图形结构的数据元素是多对多的关系(如图1-3-4所示)
我们在用示意图表示数据的逻辑结构时,要注意两点:
- 将每一个数据元素看做一个结点,用圆圈表示。
- 元素之间的逻辑关系用结点之间的连线表示,如果这个关系是有方向的,那么用带箭头的连线表示。从之前的例子也可以看出,逻辑结构是针对具体问题的,是为了解决某个问题,在对问题理解的基础上,选择一个合适的数据结构表示数据元素之间的逻辑关系。
(2) 物理结构
物理结构:是指数据的逻辑结构在计算机中的存储形式。
数据是数据元素的集合,那么根据物理结构的定义,实际上就是如何把数据元素存储到计算机的存储器中。存储器主要是针对内存而言的,像硬盘、软盘、光盘等外部存储器的数据组织通常用文件结构来描述。数据的存储结构应正确反映数据元素之间的逻辑关系,这才是最为关键的,如何存储数据元素之间的逻辑关系,是实现物理结构的重点和难点。
数据元素的存储结构形式有两种:顺序存储和链式存储。
① 顺序存储结构
顺序存储结构:在逻辑上相邻的元素在物理上也相邻。(如图1-5-5所示)。
② 链式存储结构
链式存储结构:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。
数据元素的存储关系并不能反映其逻辑关系,因此需要用一个 指针存放数据元素的地址,这样通过地址就可以找到相关联数据元素的位置(如图1-5-6所示)。
显然,链式存储就灵活多了,数据存在哪里不重要,只要有一个指针存放了相应的地址就能找到它了。逻辑结构是面向问题的,而物理结构就是面向计算机的,其基本的目标就是将数据及其逻辑关系存储到计算机的内存中。
三、 抽象数据类型
- 1. 数据类型
数据类型:是指一组性质相同类型的值的集合及定义在集合上的操作的总称。
在C语言中,按取值的不同,数据类型可分为两类:
(1) 原子类型:是不可以再分解的基本类型,包括整型、实型、字符型等。
(2) 结构类型:由若干个类型组合而成,是可以再分解的。例如整型数组是由若干个整数组成的。
- 2. 抽象数据类型
抽象数据类型:是一个数据模型,以及定义在该模型上一组操作。
为了便于在之后的讲解中对抽象数据类型进行规范的描述,我们给出了描述象数据类型的标准格式:
ADT 抽象数据类型名
Data
数据元素之间逻辑关系的定义
Operation
操作1
初始条件
操作结果描述
操作2
......
操作n
......
endADT
颜色函数代码
/* Note:Your choice is C IDE */
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#include "conio.h"
#include "windows.h"
int color(int c); void main()
{
int i,j;
int k,l;
color();
printf("贪吃蛇大作战\n");
color();
printf("贪吃蛇大作战\n"); for(i=;i<=;i++){
for(j=;j<=;j++){
color();
printf("-");
printf("|");
if(i==||i==){
color();
for(l=;l<=;l++){
printf("-");
}}
printf("\n");
}
}
} int color(int c)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),c);
return ;
}
北京庙会系统
#include "stdio.h"
#include "stdlib.h"
int j;
void Show_menu(){
printf("\n\n\t\t\t═ 北京庙会 ═\n");
printf("\t\t\t1.门票购买\n");
printf("\t\t\t2.票务查询\n");
printf("\t\t\t3.游园调查\n");
printf("\t\t\t4.刷新\n");
printf("\t\t\t0.退出\n");
printf("请输入功能编号:");
scanf("%d",&j);
}
void Gnen1(){
int p,d;//p为case1中的张数d为票的单价
float sum=0.0;
printf("请输入购票张数:");
scanf("%d",&p);
printf("请输入每张票务单价:");
scanf("%d",&d);
sum=p*d;
printf("请核对信息:购票张数%d,单张票价%.2f,合计总票价%.2f\n",p,(float)d,sum);
}
void Gnen2(){
int am=,u;//am为总和
printf("请输入5-10号出票情况\n");
for(j=;j<;j++){
printf("请输入%d日的出票情况:",j+);
scanf("%d",&u);
am+=u;
}//for over
printf("5-10日的累计出票%d张\n",am);
}
void Gnen3(){
int t[];//t代表年龄
float b1=0.0,b2=0.0,b3=0.0;
for(j=;j<;j++){
printf("请输入游客年龄:");
scanf("%d",&t[j]);
}
for(j=;j<;j++){
if(t[j]>=&&t[j]<=){
b1++;
}else if(t[j]>){
b2++;
}
}//for 结束 printf("20-60之间的游客占%.2f%%,60岁以上的占%.2f%%,其他年龄分布占%.2f%%\n",(b1*/),(b2*/),(-b1-b2)*/);
}
void input_error(){
printf("请输入正确编号!!\n");
}
void main()
{
int mima;
int i=;//j为功能编号 do{
printf("\t\t\t请输入登录密码:");
scanf("%d",&mima);
if(mima==){
for(i=;i>;i++){
Show_menu();
switch (j){
case :Gnen1();break;
case :Gnen2();break;
case :Gnen3();break;
case :system("cls");break;
case :exit();
default :input_error();
}
}//for loop
}//if
else{
printf("您输入的密码有误,请重新输入,您还有%d次机会\n\n",-i);}
i++;
}while(i<=); }//zuihou
字母排序
/* Note:Your choice is C IDE */
#include "stdio.h"
#include "string.h"
void main()
{
int i,j,k;
char ch[][]; char tem;
for(i=;i<;i++){
gets(ch[i]);
} for(i=;i<;i++){
for(j=;j<k-i;j++){
if(strcmp(ch[j],ch[j+])>=){
strcpy(tem,ch[j]);
strcpy(ch[j],ch[j+]);
strcpy(ch[j+],tem);
}
}
}
for(j=;j<;j++){
puts(ch[j]);} }
c语言进阶8-数据结构的更多相关文章
- 1. C语言中的数据结构.md
C语言内建数据结构类型 整型 整型数据是最基本的数据类型,不过从整形出发衍生出好几种integer-like数据结构,譬如字符型,短整型,整型,长整型.他们都是最基本的方式来组织的数据结构,一般是几位 ...
- 【R笔记】R语言进阶之4:数据整形(reshape)
R语言进阶之4:数据整形(reshape) 2013-05-31 10:15 xxx 网易博客 字号:T | T 从不同途径得到的数据的组织方式是多种多样的,很多数据都要经过整理才能进行有效的分析,数 ...
- Cocos2d-x 脚本语言Lua基本数据结构-表(table)
Cocos2d-x 脚本语言Lua基本数据结构-表(table) table是Lua中唯一的数据结构.其它语言所提供的数据结构,如:arrays.records.lists.queues.sets等. ...
- 《C语言进阶剖析》课程目录
<C语言进阶剖析>学习笔记 本文总结自狄泰软件学院唐佐林老师的<C语言 ...
- Go语言核心36讲(Go语言进阶技术二)--学习笔记
08 | container包中的那些容器 我们在上次讨论了数组和切片,当我们提到数组的时候,往往会想起链表.那么 Go 语言的链表是什么样的呢? Go 语言的链表实现在标准库的container/l ...
- 彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-项目入口与路由EP01
书接上回,我们已经安装好Iris框架,并且构建好了Iris项目,同时配置了fresh自动监控项目的实时编译,万事俱备,只欠东风,彩虹女神蓄势待发.现在我们来看看Iris的基础功能,如何编写项目入口文件 ...
- java语言进阶(三)_List_Set_数据结构_Collections
主要内容 数据结构 List集合 Set集合 Collections 第一章 数据结构 1.1 数据结构有什么用? 常见的数据结构:堆.栈.队列.数组.链表和红黑树 . 1.2 常见的数据结构 栈 栈 ...
- C 语言 进阶
清单狂魔,只挖坑不填坑.. 前言 最近经常被询问 C 语言 相关的问题,突然便也觉得需要思考一下 C 语言的进阶了. 我用 C 语言写过的最大的一个项目,也只是那个贪吃蛇,后来就断断续续地用 Pyth ...
- R语言进阶
一.初学入门:<R in Action><The Art of_R Programming>入门者可首选两本,前者从统计角度入手,分高中低三部分由浅入深的讲解了如何用R来实现统 ...
- C语言实现通用数据结构的高效设计
近期在阅读一个开源的C++代码.里面用到了大量的STL里面的东西.或许是自己一直用C而非常少用C++来实现算法的原因.STL里面大量的模板令人心烦.一直对STL的效率表示怀疑,但在网上搜到这样一个帖子 ...
随机推荐
- [Erlang-0016][aque_tcp] 一个 Erlang TCP 组件
项目地址:https://github.com/liangjingyang/aque_tcp 欢迎任何形式的转载,但请务必注明出处:http://www.cnblogs.com/liangjingya ...
- 让VC2012生成的程序支持XP系统(修改mkspecs\win32-msvc2012\qmake.conf,QT的DLL都是支持XP的,只与EXE有关)good
如果用的编译器是VC2012以上,那么默认生成出的程序是不能运行在XP系统上的.所以需要修改链接参数 我们要做的是修改qmake.conf文件中的参数,文件路径根据开发环境不同而不同下面以5.1.1 ...
- Qt5.5以来对Network的改进(包括对SSL的功能支持,HTTP的重定向等等)
Qt Network New SSL back-end for iOS and OS X based on Secure Transport. Note that in Qt 5.6 this wil ...
- 11g Oracle导出表 默认不导出数据为空的表解决
11g oracle导出表时会默认不导出数据为空 1.Oracle11g默认对空表不分配segment,故使用exp导出Oracle11g数据库时,空表不会导出. 2.设置deferred_segm ...
- 【数据结构】30、hashmap=》hash 计算方式
前提知识 写在前面,为什么num&(length - 1) 在length是2的n次幂的时候等价于num%length n - 1意味着比n最高位小的位都为1,而高的位都为0,因此通过与可以剔 ...
- 移动IM开发指南2:心跳指令详解
<移动IM开发指南>系列文章将会介绍一个IM APP的方方面面,包括技术选型.登陆优化等.此外,本文作者会结合他在网易云信多年iOS IM SDK开发的经验,深度分析实际开发中的各种常见问 ...
- Python自学day-10
一.多进程 程序中, 大量的计算占用CPU资源,而IO操作不占CPU资源.当程序需要进行大量计算时,Python采用多线程运行的速度不一定比单线程快多少.但是当程序是IO密集型的,那就应该使用多线程来 ...
- Scala 学习之路(一)—— Scala简介及开发环境配置
一.Scala简介 1.1 概念 Scala全称为Scalable Language,即“可伸缩的语言”,之所以这样命名,是因为它的设计目标是希望伴随着用户的需求一起成长.Scala是一门综合了面向对 ...
- 【工具】java 文本文档txt写出记录工具
彩蛋!http://abowman.com/google-modules/dog/ 以下是自己小游戏生成人物经历的传记时保存txt所用到的工具类,功能简单,不多说什么,贴上代码: package co ...
- Codeforces Round #565 (Div. 3) A
A. Divide it! 题目链接:http://codeforces.com/contest/1176/problem/A 题目 You are given an integer n You ca ...