程序设计基础教程第11章 数据结构和数据抽象

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2017/7/30
程序设计基础(C语言)wh
11
11.3 堆栈
11.3.1 抽象栈的定义及基本操作
堆栈(也称为栈,stack)是一个线性表,其插入(也称 为添加)和删除操作都在表的同一端进行。其中允许插入和删 除的一端称为栈顶(top),另一端称为栈底(bottom)。 抽象堆栈类型的操作: 构造空栈:InitStack(&S)。
2017/7/30
程序设计基础(C语言)wh
9
【算法11.3】删除 int Delete_SeqList(SeqList *L,int i) { int j; if(i<1||i>L->length) /*检查空表及删除位置的合法性*/ return(0); for(j=i;j<=L->length-1;j++) L->data[j-1]=L->data[j]; /*向前移动*/ L->length--; /*顺序表长度减1*/ return(1); }
程序设计基础(C语言)wh
3
11.1.2 抽象数据类型
抽象数据类型(abstract data type, ADT)是用户进行软件设 计时,从问题的数学模型中抽象出来的逻辑数据结构和逻辑数 据结构上的一组操作,而不考虑计算机的具体存储结构和操作 的具体实现算法。
抽象数据类型可用(D, S, P)三元组表示。其中,D是数据 对象;S是D上的关系集;P是D中数据运算的基本运算集。其 基本格式如下: ADT 抽象数据类型名 { 数据对象:<数据对象的定义> 数据关系:<数据关系的定义> 基本运算:<基本运算的定义> } ADT抽象数据类型名

十一

数据结构和数据抽象
2017/7/30
程序设计基础(C语言)wh
1
本章内容
11.1 数据抽象
11.2 线性表 11.3 堆栈 11.4 队列 小结
2017/7/30
程序设计基础(C语言)wh
2
11.1 数据抽象
11.1.1 数据结构和数据类型
数据结构用来反映数据的内部构成 ,有逻辑上的数据结 构和物理上的数据结构之分 。
L=(SeqList *)malloc(sizeof(SeqList));
L->length=0; return L; }
2017/7/30
程序设计基础(C语言)wh
8
【算法11.2】插入 int Insert_SeqList(SeqList *L,int I,elemtype x) { int j ; if(i<1||i>L->length+1) return(0) ; /*检查插入位置的正确性*/ for(j=L->length;j>=i;j--) L->data[j]=L->data[j-1] ; /*向后移动*/ L->data[i]=x ; /*新元素插入*/ L->length++ ; /*顺序表长度增加1*/ return (1) ; /*插入成功,返回*/ }
2017/7/30
程序设计基础(C语言)wh
5
11.2.2 线性表的基本操作 线性表上的基本操作有: (1) 线性表初始化:InitList(&L) (2) 求线性表的长度:ListLength (L) (3) 求线性表中某个数据元素值:GetElem(L,i,&x) (4) 按元素值查找:LocateElem(L,x) (5) 插入操作:InsertList(&L,i,x) (6) 删除操作:DeleteList(&L,i,&x) 说明: (1) 某数据结构上的基本运算,不是它的全部运算,而是一些常 用的基本的运算,而每一个基本运算在实现时也可能根据不同 的存储结构派生出一系列相关的运算来。 (2) 在上面各操作中定义的线性表L仅仅是一个抽象在逻辑结构 层次的线性表,尚未涉及到它的存储结构,因此每个操作在逻 辑结构层次上尚不能用具体的某种程序语言写出具体的算法。
判断栈是否为空:StackEmpty(S) 。
判断栈是否为满:StackFull(S) 。 出栈:Pop(&S, &x) 。
2017/7/30 程序设计基础(C语言)wh 4
11.2 线性表
11.2.1 线性表的定义
线性表是具有相同特性的n(n≥0)个数据元素的有限序列, 通常记为:(a1,a2,… ai-1,ai,ai+1,… an)
其中n为表长,n=0时称为空表。
特点: 均匀性:同一线性表的各数据元素必定有相同的数据类型 和长度。 有序性:有唯一的“第一个”和“最后一个”元素,每个 元素只有一个直接前趋和一个直接后续。
2017/7/30 程序设计基础(C语言)wh 6
11.2.3 线性表的顺序存储
从结构上考虑,通常线性表的存储类型可以描述如下: typedef struct
{elemtype data[MAXSIZE];
int length; } SeqList; 定义一个顺序表:SeqList L;,有时定义一个指向SeqList类 型的指针更为方便:SeqList *L;
L是一个指针变量,指向SeqList类型的数据,线性表的存 储空间通过如下语句获得:
L=(SeqList *)malloc(sizeof(SeqList));
2017/7/30
பைடு நூலகம்
程序设计基础(C语言)wh
7
11.2.4 顺序表上基本运算的实现
【算法11.1】顺序表的初始化 SeqList *Init_SeqList( ) { SeqList *L;
数据类型是一个值的集合和定义在此集合上的一组操作 的总称。
数据结构是指计算机处理的数据元素的组织形式和相互 关系,数据类型是某种程序设计语言中已实现的数据结构。 在程序设计语言提供的数据类型支持下,可以根据从问题中 抽象出来的各种数据模型,逐步构造出描述这些数据模型的 各种新的数据结构。
2017/7/30
2017/7/30
程序设计基础(C语言)wh
10
【算法11.4】按值查找 int Location_SeqList(SeqList *L, elemtype x) { int i=0; while(i< L->length && L->data[i]!= x) i++; if (i>=L->length) return 0; else return i+1; /*返回该元素的位序*/ }
相关文档
最新文档