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的效率表示怀疑,但在网上搜到这样一个帖子 ...
随机推荐
- Qt 5.6.2 静态编译(VS2013 x86 target xp openssl icu webkit)
在去年4月份的时候,我写过一篇动态编译Qt5.6.0的文章,当时是为了解决webkit不能在winxp下面跑的问题,动态编译有一个缺点,就是发布的时候,要携带一大堆dll,使安装包的体积增大.而静态编 ...
- c# winform快捷键实现
我们在软件中经常用到快捷键,这里整理备份一下. 首先我们要定义可以作为快捷键的按键,以下是整理的 一些,自己可以根据情况来修改 public static Dictionary<int, str ...
- 阻止系统自动睡眠的小软件,附C#制作过程(执行SetThreadExecutionState API函数,让系统误判)
因为有时下载东西的时候,不想让电脑自动深入睡眠,所以就开启了离开模式.这样不但不节能环保,而且到真正想要睡眠的时候就是一翻蛋疼. 改过自新,关闭了离开模式,同时无操作30分钟后也会进入睡眠模式.但是在 ...
- qt在windows下的udp通信(最简单)
qt编程:windows下的udp通信 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:win7 开发环境:qt 功能: 用udp进行收发 ...
- Excel导入导出各种方式分析
1.引言 1.1解决哪些问题 现在很多公司用的导出基本上采用的通过gridView导出excel,此种导出存在以下几种问题 1.数据量大的时候有时导出有时会让浏览器卡死,因为导出的excel不是真 ...
- 发现 TSplitter 在嵌套时不好用, 索性写了个替代品(处理MouseDown,MouseMove,MouseUp,然后设定控件的Left值就可以了)
代替 TSplitter 的 TDirPanel 类: unit DirPanel; interface uses Classes, Controls, Forms, ExtCtrls; type ...
- 星星的模块封装类 IDSStarsScoreView
1 IDSStarsScoreView 的实现效果 2 类的封装方法: <声明文件> // // IDSStarsScoreView.h // Near // // ...
- jquery中的DOM操作集锦
1,查找节点: 1 2 var $li = $("ul li:eq(1)");//查找元素 $li.attr("title"); //查找元素的属性值 2, ...
- Django预备知识
http协议 url: 协议://域名(IP)+端口(80)/路径?参数(a=1&b=2) 示例:https://www.baidu.com/s/?wd=aaa MVC M:mdoel 与数据 ...
- Java基础(三) String深度解析
String可以说是Java中使用最多最频繁.最特殊的类,因为同时也是字面常量,而字面常量包括基本类型.String类型.空类型. 一. String的使用 1. String的不可变性 /** * ...