数据结构与算法三简单数据结构new.ppt

数据结构与算法三简单数据结构new

第三章 简单数据结构 第3章 简单数据结构 线性结构的特点 ⑴ 存在唯一的被称为“第一个”的或“起始”的数据元素; ⑵ 存在唯一的被称为“最后一个”的或“终端”的数据元素; ⑶ 除第一个元素之外,集合中的每一个数据元素均有且仅有一个前趋; ⑷ 除最后一个元素之外,集合中的每一个数据元素均有且仅有一个后继。 3.1 顺序表 3.1.1 线性表的基本概念 线性表是n(n≥0)个数据元素的有限序列,记为: L=(a1,a2,…,ai,…,an) 线性表的基本运算 ⑴ 初始化setnull(L),建立一个空的线性表L; ⑵ 求表长length(L),函数返回L中的元素个数; ⑶ 取第i个元素get(L,i),其中1≤i≤length(L),否则返回NULL; ⑷求前趋prior(L,x),返回元素x的前趋; ⑸求后继next(L,x),返回元素x的后继 ⑹定位locate(L,x),返回元素x在L中的位置,若x不存在,返回0或NULL; ⑺插入元素x到第i个元素之前 insert(L,x,i),其中1≤i≤length(L)+1,否则插入失败; ⑻删除第i个元素delete(L,i),其中1≤i≤length(L); 3.1.2 线性表的顺序存储——顺序表 顺序表:用一组地址连续的存储单元依次存储线性表的元素,用数组实现 顺序表数据类型的定义 //定义每一个结点,根据具体情况变化 typedef struct { int yinyu; //英语 int shuxue ;//数学 } elemtype; //定义顺序表 #define maxsize 1024 typedef struct { //顺序表最多容纳maxlen个元素 elemtp data[maxsize]; int last; // 指示当前表长 } sequenlist; 3.1.3 顺序表上的基本运算 (1)顺序表元素插入操作的算法: 3.1.3 顺序表上的基本运算 (1)顺序表元素插入操作的算法: void insert(sequenlist *L,elemtype x,int i) {int j; if((i1)||i(L-last+1)) printf(“插入位置不正确\n”); else if(L-last=MAXSIZE) printf(“表已满,发生上溢\n”); else {for(j=L-last;j=i;j--) L-data[j+1]=L-data[j]; L-data[i]=x; L-last=L-last+1; } }/*insert*/ 3.1.3 顺序表上的基本运算 (2)顺序表元素删除操作的算法: 3.1.3 顺序表上的基本运算 (2)顺序表元素删除操作的算法: void delete(sequenlist *L, int i) {int j; if((i1)||(iL-last)) printf(“删除位置不正确\n”); else {for(j=i+1;j=L-last;j++) L-data[j-1]=L-data[j]; L-last=L-last-1; } } 举例—删除顺序表中的重复元素 算法思路:从顺序表中第一个元素起,逐个检查它后面是否有值相同的其它元素,若有便删除之;直到表中所有元素都已无重复元素为止。为此,算法中需设两重循环,外层控制清除的趟数,内层控制每趟的检查范围。 举例—删除顺序表中的重复元素 void Purge(sequenlist *L) {int i,j,k; i=1; while(iL-last)//每个元素都要比较 {j=i+1; while(j=L-last) if(L-data[j]==L-data[i])//相等则删除 {for(k=j+1;k=L-last;k++) L-data[k-1]=L-data[k]; L-last=L-last-1;} else j++;

文档评论(0)

1亿VIP精品文档

相关文档