数据结构与算法第三章简单数据结构new.ppt
《数据结构与算法第三章简单数据结构new.ppt》由会员分享,可在线阅读,更多相关《数据结构与算法第三章简单数据结构new.ppt(88页珍藏版)》请在优知文库上搜索。
1、3/2/20231第三章 简单数据结构3/2/20232第3章 简单数据结构l3.13.1 顺序表顺序表l3.2 3.2 链表链表l3.33.3 栈栈l3.43.4 队列队列l3.53.5 * *广义表广义表3/2/20233线性结构的特点 存在唯一的被称为“第一个”的或“起始”的数据元素; 存在唯一的被称为“最后一个”的或“终端”的数据元素; 除第一个元素之外,集合中的每一个数据元素均有且仅有一个前趋; 除最后一个元素之外,集合中的每一个数据元素均有且仅有一个后继。3/2/202343.1 顺序表l3.1.1 线性表的基本概念线性表是n(n0)个数据元素的有限序列,记为:L=(a1,a2,a
2、i,an)林鹏黄龙张艺谋张三丰(A,B,C,D,E,Z)字母表登记表3/2/20235线性表的基本运算 初始化setnull(L),建立一个空的线性表L; 求表长length(L),函数返回L中的元素个数; 取第i个元素get(L,i),其中1ilength(L),否则返回NULL;求前趋prior(L,x),返回元素x的前趋;求后继next(L,x),返回元素x的后继定位locate(L,x),返回元素x在L中的位置,若x不存在,返回0或NULL;插入元素x到第i个元素之前 insert(L,x,i),其中1ilength(L)+1,否则插入失败;删除第i个元素delete(L,i),其中1
3、ilength(L);3/2/202363.1.2 线性表的顺序存储顺序表l顺序表:用一组地址连续的存储单元依次存储线性表的元素,用数组实现 例:(A,B,C,D,E,Z)ABCDEZ线性表的第i个元素的存储地址为Loc(ai)=Loc(a1)+(i-1)*k 3/2/20237顺序表数据类型的定义/定义每一个结点,根据具体情况变化typedef struct int yinyu; /英语 int shuxue ;/数学 elemtype; /定义顺序表#define maxsize 1024typedef struct /顺序表最多容纳maxlen个元素 elemtp datamaxsize
4、; int last; / 指示当前表长 sequenlist;89907868985566775588英语数学last=5maxlen3/2/202383.1.3 顺序表上的基本运算(1)顺序表元素插入操作的算法:A1A2AiAn-1An在第i个位置插入需移动次数为n-i+1次,每个位置插入的概率为1/(n+1)平均移动次数: (n-i+1)/(n+1)=n/2 (其中i=1.n+1) 算法的时间复杂度 T(n)=O(n) maxsize3/2/202393.1.3 顺序表上的基本运算(1)顺序表元素插入操作的算法:void insert(sequenlist *L,elemtype x,i
5、nt i) int j; if(i(L-last+1) printf(“插入位置不正确插入位置不正确n”); else if(L-last=MAXSIZE) printf(“表已满,发生上溢表已满,发生上溢n”); else for(j=L-last;j=i;j-) L-dataj+1=L-dataj; L-datai=x; L-last=L-last+1; /*insert*/3/2/2023103.1.3 顺序表上的基本运算(2)顺序表元素删除操作的算法:A1A2A3AiAn删除第i个元素需要移动n-i次平均移动次数: (n-i)/n (其中i=0.n-1) 算法的时间复杂度T(n)=O(
6、n) 3/2/2023113.1.3 顺序表上的基本运算(2)顺序表元素删除操作的算法: void delete(sequenlist *L, int i) int j; if(iL-last) printf(“删除位置不正确删除位置不正确n”); else for(j=i+1;jlast;j+) L-dataj-1=L-dataj; L-last=L-last-1; 3/2/202312举例删除顺序表中的重复元素l算法思路:从顺序表中第一个元素起,逐个检查它后面是否有值相同的其它元素,若有便删除之;直到表中所有元素都已无重复元素为止。为此,算法中需设两重循环,外层控制清除的趟数,内层控制每趟
7、的检查范围。3/2/202313举例删除顺序表中的重复元素void Purge(sequenlist *L) int i,j,k; i=1; while(ilast)/每个元素都要比较每个元素都要比较 j=i+1; while(jlast) if(L-dataj=L-datai)/相等则删相等则删除除 for(k=j+1;klast;k+) L-datak-1=L-datak; L-last=L-last-1; else j+; i+; /*Purge*/delete(L,j)3/2/2023143.2 链表l顺序表存储的缺点1)预先分配连续的空间2)不能根据需要动态分配3)插入删除等操作需要
8、移动大量数据HELLO3/2/2023153.2 链表l单链表单链表 l循环链表循环链表 l双向链表双向链表 3/2/2023163.2.1单链表l单链表的组成及定义HELLO数据域 指针域结点组成结点组成结点定义:结点定义:typedef struct node elemtp data; struct node *next;LinkList;L头指针头指针3/2/2023173.2.1单链表l头结点,头指针,第一个结点(首元结点)HELLO第一个结点第一个结点head头结点头结点头指针头指针3/2/2023183.2.1单链表l动态生成一个结点 LinkList *H; H=(LinkLis
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 算法 第三 简单 new