1、2 假设以数组sequm存放循环队列的元素,同时设变量rear和quelen 分别指示循环队列中队尾元素的位置和内含元素的个数。编写实现该循环队列的入队和出队操作的算法。提示:队空的条件:sq-quelen=0;队满的条件:quelen=m。循环队列)实验三 串1 熟悉串的顺序存储结构2 掌握串的基本运算及应用1串采用顺序存储结构,编写朴素模式匹配算法,查找在串中是否存在给定的子串。模式匹配)2若S是一个采用顺序结构存储的串,利用C的库函数strlen和strcpy(或strncpy)编写一算法void SteDelete(char*S,int I,int m),要求从S中删除从第i个字符开始
2、的连续m个字符。若istrlen(S),则没有字符被删除;若i+mstrlen(S),则将S中从位置i开始直至末尾的字符均删除。删除子串)实验四 数组1 熟悉数组的结构2 掌握矩阵的压缩存储3 能够对数组和矩阵的压缩存储进行运算1. 若在矩阵Amn中存在一个元素Aij,其满足Aij是第i行元素中最小值,且又是第j列元素中最大值,则称此元素为该矩阵的一个马鞍点。用二维数组存储矩阵Amn ,设计算法求出矩阵中所有马鞍点。找马鞍点)2. A和B是两个nn阶的对称矩阵,以行为主序输入对称矩阵的下三角元素,压缩存储存入一维数组A和B,编写一个算法计算对称矩阵A和B的乘积,结果存入二维数组C。对称矩阵相乘
3、)实验五 树1 熟悉二叉树的链式存储结构2 掌握二叉树的建立、深度优先递归遍历等算法3 能够利用遍历算法实现一些应用1 已知二叉树采用二叉链表存储结构,如果左、右子树非空,且左子树根结点大于右子树根结点,则交换根结点的左、右子树。即按要求交换二叉树及子树的左、右子树。交换左右子树)2 采用二叉链表结构存储一棵二叉树,编写一个算法统计该二叉树中结点总数及叶子结点总数。统计二叉树结点)实验六 图1 熟悉图的邻接矩阵和邻接表的存储结构2 熟悉图的邻接矩阵和邻接表的建立算法3 掌握图的遍历算法1 无向图采用邻接矩阵存储,编写深度优先搜索遍历算法,从不同的顶点出发对无向图进行遍历。无向图邻接矩阵)BCA
4、DEFGH实验七 排序1 熟悉各种内部排序算法2 能够编写程序显示排序过程中各趟排序的结果3 能够编写一些排序的算法1 采用希尔排序方法对顺序表中的证型数据进行排序,设计希尔排序算法并显示每趟排序的结果。希尔排序)2 编写一个双向起泡的排序算法,即在排序过程中交替改变扫描方向,同时显示各趟排序的结果。双向起泡排序)实验八 查找1 熟悉线性表、二叉排序树和散列表的查找2 能够编写一些查找的算法1 18个记录的关键字为22、12、13、8、9、20、33、42、44、38、24、48、60、58、74、49、86、53,编写分块查找的算法进行查找。分块查找)2 编写一个判别给定的二叉树是否为二叉排
5、序树的算法,设二叉树以二叉链表存储表示,结点的数据域只存放正整数。判断二叉排序树)附录:原代码实验一:第1题(1)/顺序表逆置的程序代码#includemalloc.h/顺序表结构类型定义typedef char datatype;const int maxsize=1024;typedef struct datatype datamaxsize; int last;sequenlist;void create(sequenlist*&);void print(sequenlist*);void invert(sequenlist*);void main()sequenlist*L;creat
6、e(L);/建立顺序表print(L);/输出顺序表invert(L);/调用顺序表逆值的函数L)L=(sequenlist*)malloc(sizeof(sequenlist);L-last=0;char ch;while(ch=getchar()!=*) L-last+;dataL-last=ch;void print(sequenlist*L)for(int i=1;ilast;i+)printf(%2c,L-datai);printf(n/顺序表逆置void invert(sequenlist*L)int n=L-last/2;=n;char temp=L-datai;datai=L-
7、last-i+1; L-last-i+1=temp;第1题(2)/单链表逆置的程序代码/单链表结构类型定义typedef struct nodedatatype data;struct node *next;linklist;void create(linklist*&void print(linklist *);void invert(linklist*);linklist*head;create(head);print(head);invert(head);/调用单链表逆置的函数/采用尾插法建立具有头结点的单链表head)linklist *s,*r;head=(linklist*)mal
8、loc(sizeof(linklist);r=head;s=(linklist*)malloc(sizeof(linklist);s-data=ch;r-next=s;r=s;r-next=NULL;/输出单链表void print(linklist *head)linklist*p=head-next;while(p!=NULL),p-data);p=p-/单链表逆置void invert(linklist*head)linklist*p,*q,*r;p=head-q=p-while(q!r=q-q-next=p;p=q;q=r;head-next-第2题/分解单链表的程序代码/链表结构类型
9、定义 datatype data; struct node *next;void resolve(linklist*,linklist*,linklist*,linklist*);void insert(linklist*,linklist*);void print1(linklist*);void print2(linklist*); linklist *head,*letter,*digit,*other; create(head); print1(head); letter=(linklist*)malloc(sizeof(linklist);/建立3个空循环链表 letter-next=letter; digit=(linklist*)malloc(sizeof(linklist); digit-next=digit; other=(linklist*)malloc(sizeof(linklist); other-next=other; resolve(head,letter,digit,other);/调用分解单链表的函数 print2(letter);/输出循环链表 print2(digit); print2(other);/建立单链表v
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1