周记(五)
来源:互联网 发布:apache windows 编辑:程序博客网 时间:2024/06/06 00:53
姓名
徐秀
周次
5
方向
3G
内
容
本周学习知识点:
数据结构
本周学习收获:
(1)位段操作
(2)线性表
(3)单链表
学习总结:
(1)什么是数据结构
数据:所有能被输入到计算机中,且能被计算机处理的符号的集合。不仅包括数字、字符串,还包括图形、图像、声音、动画、视频等数据形式。
数据元素:数据的基本单位,也称结点(node)或记录(record) 。
数据项:是数据结构中讨论的最小单位。一个数据元素可由若干数据项组成。
(2)基本概念和术语
数据对象:是性质相同的数据元素的集合,是数据的一个子集。
数据结构(Data Structure)是相互之间存在一种或多种特定关系的数据元素的集合。
逻辑结构:数据结构中所说的“关系”实际上是指数据元素之间的逻辑关系,又称此为逻辑结构。
存储结构(物理结构) :
顺序存储结构:借助元素在存储器中的相对位置来表示 数据元素间的逻辑关系。(占用连续的存储单元)
链式存储结构:借助指示元素存储地址的指针表示数据元素间的逻辑关系。 (可以占用不连续的存储单元)
(3)算法和算法的描述
一个算法必须满足以下五个重要特性:
有穷性: 一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。
确定性:算法的每一步必须是确切定义的,不能产生二义性
可行性:算法是能够实现的.即算法描述的操作都是可以通过已经实现的基本运算执行有限次来实现的。
有输入:一个算法有零个或多个输入
有输出:一个算法有零个或多个输出
(4)六种位运算的运算法则
1)位运算的分类:
位逻辑运算、位移运算两种
位逻辑运算[符]:
& | ^ ~
位逻辑运算的特点
只作用于整型、字符型数据;
作用于整型、字符型数据的每个二进制位,不是数的整体
而一般逻辑运算是作用数的整体,不是数的每个二进制位。运算结果是二进制数
位运算速度快,效率高,节省存储空间
负数以补码形式参与运算
2)按位与运算符(&):
运算规则:
0&0=0 1&0=0 0&1=0 1&1=1
只要对应位上的值均为1则该位上的结果值为1
特殊作用。
①将一个存储单元各位清0
②取某个数中的某些位。
方法:将本数与某个特定数按位与运算即可。
3)按位或运算符(|)
运算规则:
0|0=0 1|0=1 0|1=1 1|1=1
只要对应位上的值其中一个为1则该位上的结果值为1
特殊作用。
①常用于将一个数的某些特定位置为1
方法:将本数与某个特定数按位或运算即可
4)按位异或运算符(^)
运算规则:
0^0=0 1^0=1 0^1=1 1^1=0
只要对应位上的值互不相同则该位上的结果值为1
特殊作用[p300]。
①使某些特定的翻转
②任何数与0相异或结果保留原数本身
③交换两个变量的值不用中间变量。
a=a^b b=b^a a=a^b
注意给变量赋值的先后顺序。
按位异 求反 运算符(~)
运算规则:
~0=1 ~1=0
对每个上的值按位求反:1变为0;0变为1。
注意以上位逻辑运算的优先级别。
注意:~运算符比算术运算、关系运算、逻辑运算和其它运算的优先级别都高。
5)位移运算[符]: << 和 >>
左位移运算符(<<):
运算规则: a=a<<n 将a中所有位向左移动n位。
运算的作用:相当于乘法运算。左移一位相当于乘以2。
高位[左边位]左移后溢出被舍弃,不起作用。低位补以0。
右位移运算(>>)
运算规则: a=a>>n 将a中所有位向右移动n位。
运算的作用:相当于除法运算。右移一位相当于除以2。
注意:注意数的符号问题[即正负的问题]
对于无符号数[正数]右移时高位补以0。
对于有符号数,高位为0[正数]右移时高位补以0。
对于有符号数,高位为1[负数]时:
右移时高位补以0,称之为“逻辑位移”。
右移时高位补以1,称之为“算术位移”。
TC采用“算术位移”,高位补以1。
6)位域的定义
位域以前曾介绍过对内存中信息的存取一般以字节为单位。
实际上,有时存储一个信息不必用一个或多个字节,例如,“真”或“假”用0或1表示,只需1位即可。
C语言允许在一个结构体中以位为单位来指定其成员所占内存长度,这种以位为单位的成员称为“位段”或称“位域” ( bit field) 。利用位段能够用较少定义和位域变量的说明位域定义与结构定义相仿
struct 位域结构名
{
…
类型说明符 位域名:位域长度;
…
};
位域位域长度不能超过该类型的位数。
可以将该类型所占的其它位忽略。
可以无位域名,表示填充或者调整位置
(5)线性表的基本概念、建立及操作
线性表的基本概念
线性表是n个元素的有限序列,它们之间的关系可以排成一个线性序列:
a1,a2,…… ,ai,…… ,an
其中n称作表的长度,当n=0时,称作空表。
线性结构特点:在数据元素的非空有限集中
存在唯一的一个被称作“第一个”的数据元素
存在唯一的一个被称作“最后一个”的数据元素
除第一个外,集合中的每个数据元素均只有一个前驱
除最后一个外,集合中的每个数据元素均只有一个后继
顺序表:
定义:用一组地址连续的存储单元存放一个线性表叫~
元素地址计算方法:
LOC(ai)=LOC(a1)+(i-1)*L
LOC(ai+1)=LOC(ai)+L
其中:
L— 一个元素占用的存储单元个数
LOC(ai)—线性表第i个元素的地址
特点:
实现逻辑上相邻—物理地址相邻
实现随机存取
实现:可用C语言的一维数组实现
顺序表上常见的运算
初始化、求长度、取元素、修改、前插、删除、检索、排序。
1)InitList(&L) 初始化,构造一个空的线性表
2)ListLength(L) 求长度,返回线性表中数据元素个数
3)GetElem(L,i,&e) 取表L中第i个数据元素赋值给e
4)LocateElem(L,e) 按值查找,若表中存在一个或多个值为e的结点,返回第一个找到的数据元素的位序,否则返回一个特殊值。
5)ListInsert(&L,i,e) 在L中第i个位置前插入新的数据元素e,表长加1。
6)ListDelete(&L,i,e) 删除表中第i个数据元素,e返回其值,表长减1。
顺序存储结构的优缺点
优点
逻辑相邻,物理相邻
可随机存取任一元素
存储空间使用紧凑
缺点
插入、删除操作需要移动大量的元素
预先分配空间需按最大空间分配,利用不充分
表容量难以扩充
(6)线性表的增、删、改、查
插入
定义:线性表的插入是指在第I(1£i £ n+1)个元素之前插入一个新的数据元素x,使长度为n的线性表
删除
定义:线性表的删除是指将第i(1£i £ n)个元素删除,使长度为n的线性表
(7)单链表的基本概念、建立和操作
线性表的链式存储结构
特点:
用一组任意的存储单元存储线性表的数据元素
利用指针实现了用不相邻的存储单元存放逻辑上相邻的元素
每个数据元素ai,除存储本身信息外,还需存储其直接后继的信息
结点
数据域:元素本身信息
指针域:指示直接后继的存储位置
单链表的基本运算
查找:查找单链表中是否存在结点X,若有则返回指向X结点的指针;否则返回NULL
插入:在线性表两个数据元素a和b间插入x,已知p指向a
删除:单链表中删除b,设p指向a
单链表特点
它是一种动态结构,整个存储空间为多个链表共用
不需预先分配空间
指针占用额外存储空间
不能随机存取,查找速度慢
循环链表(circular linked list)
循环链表是表中最后一个结点的指针指向头结点,使链表构成环状
特点:从表中任一结点出发均可找到表中其他结点,提高查找效率
操作与单链表基本一致,循环条件不同
单链表p或p->link=NULL
循环链表p或p->link=H
对授课教师意见建议:
- 周记(五)
- 周记(五)
- (五)
- 隐马尔科夫学习五(五)
- Android-五子连珠(五)-配置文件
- TCP/IP (五)
- JDBC 概述(五)
- JDBC 概述(五)
- 英文求职信(五)
- 恶斗EJB(五)
- 中国古代格言(五)
- 实习日志(五)
- 数据结构(五)
- 黑客技术(五)
- (五)输入输出
- JDBC 概述(五)
- JavaScript学习(五)
- 毕业设计(五)
- 周记(四)
- 开发者使用JasperReport——通过数据源生成报表
- poj 动态规划题目列表
- 调试技巧
- HDU 2159 FATE
- 周记(五)
- error 25541 failed to open xml file c:\windows\microsoftnet\framework\v4.0.30319\config\ machine.con
- Class文件结构
- 继承那些事。。。。实例说明(1)
- vector
- extjs中的OnReady
- 外星人计数
- 开发者使用JasperReport——不同数据源之Map数据源
- SQL Loader的使用详解