1、实验报告数 据 结 构实验报告班级学号: 姓名: 数 据 结 构实验报告学院:信息科学与技术学院 专业:软件技术专业 学期:20102011学年第二学期 班级: 学号: 姓名: 实验1 函数、指针、结构体复习院(系):信息科学与技术学院 课程名称:数据结构 教师签名:班级学号实验室专业姓名计算机号实验名称所用软件实验成绩1.1 实验目的 1掌握C语言的语法并由算法形成相应的程序。2熟练掌握C语言函数调用的相关知识点。3熟练掌握C语言的指针和结构体相关知识点。4理解数据结构的基本概念。1.2 实验准备1复习C语言的函数调用、指针、结构体的相关知识点。2算法的概念和算法分析等知识。3C语言程序设计
2、有关函数及数组等的知识及编程环境的使用方法。4复习课堂讲解的理论内容。1.3 实验任务1在提示/*blank*/下面填写合适的内容完成程序设计。编写一个程序,判断一个字符串是否为“回文”(顺序和倒读都一样的字符串称为“回文”),并分析算法的时间复杂度。提示:实现本程序需要设计两个函数。主函数main,数据的输入和输出在该函数中完成。自定义函数func,判断串s是否为回文。采用的方法是:用flag表示是否为回文。用i从左向右扫描字符串s,用j从右向左扫描字符串s,若si与sj不相等,则flag=0(表示不是回文)并退出循环,否则,继续比较直到ij不成立。/*判断指定字符串是否回文*/#inclu
3、de int func(char *str)int i,j,t,flag; t=strlen(str); for(i=0,j=t-1;i=t/2) flag=1; return flag;void main()/*blank*/_; /*填空位置1:变量定义*/_; /*填空位置2:从键盘输入需要判定的字符串*/_; /*填空位置3:调用func函数*/_; /*填空位置4:根据返回值flag的值,输出判定结果*/该算法的时间复杂度是:_。2定义函数int f(char *x, char y)判断x所指的字符串是否包含字符y,若是则函数返回1,否则返回0。写出完整的源程序代码。#include
4、 #include int f(char *x,char y) /*写出自定义函数f的函数体部分,实现函数功能*/void main() char *str,ch; int t; gets(str); scanf(%c,&ch); t=f(str,ch); printf(t=%dn,t);3用结构体类型编写一个程序,输入一个学生的学号、姓名及3门课的成绩,计算并输出其平均成绩。写出完整的源程序代码。#include struct student int id; char name10; float score3;s;main() /*写出main函数的函数体部分,实现函数功能*/实验2 线性表
5、院(系):信息科学与技术学院 课程名称:数据结构 教师签名:班级学号实验室专业姓名计算机号实验名称所用软件实验成绩2.1 实验目的1掌握顺序表的基本特点。2熟练掌握顺序表的建立、查找、插入和删除等操作。3掌握单链表的基本特点。4熟练掌握单链表的建立、插入、删除等基本操作。5理解循环链表、双向链表的含义及其特点。6了解循环链表、双向链表的基本操作。2.2 实验准备 1线性表顺序存储结构的表示。2顺序表的基本操作:顺序表的建立、查找、插入、删除。3线性表链式存储结构的表示。4链表的基本操作:链表的建立、查找、插入、删除。2.3 实验任务1实现顺序表的各种基本操作。(1)源程序代码。#include
6、 #define Maxsize 100typedef int datatype;typedef struct seqnode /*顺序表的类型定义*/ datatype listMaxsize; /*定义一个存放顺序表的一维数组list*/ int len; /*定义线性表的实际长度*/seqlist;void create(seqlist *L) /*建立一个顺序存储的线性表*/ int i; printf(Please input the len of the seqlist:); /*从键盘输入当前顺序表的实际长度*/ scanf(%d,&(*L).len); printf(Pleas
7、e input the every element of the seqlist:); for(i=0;i(*L).len;i+) /*从键盘输入顺序表的每个元素*/ scanf(%d,&(*L).listi); printf(Output the every element of the seqlist:n); for(i=0;i(*L).len;i+) /*顺序表建立成功后,输出整个顺序表*/ printf(%5d,(*L).listi); /*运行结果(1)*/ printf(n);void access(seqlist *L,int i) /*根据指定位置访问线性表*/ if(i(*L
8、).len-1) /*判断给定位置是否为合法取值*/ printf(The place is not correct!n); else printf(%dn,(*L).listi); /*运行结果(2)*/void before_after(seqlist *L,int i) /*根据指定位置寻找其前趋元素和后继元素*/ if(i(*L).len-1) printf(The place is not correct!n); else if(i=0) printf(%dn,(*L).listi+1); else if(i=(*L).len-1) printf(%dn,(*L).listi-1);
9、 else if(i0)&(i(*L).len-1) printf(%d,%dn,(*L).listi-1,(*L).listi+1); /*运行结果(3)*/void search(seqlist *L,int key) /*根据给定元素key查找顺序表*/ int m; for(m=0;m=(*L).len) printf(The seqlist has no the key!n); /*运行结果(4)*/void delete(seqlist *L,int i) /*删除顺序表的元素*/ int m; printf(Output the every element of the seql
10、ist before deleting:n); /*删除前输出顺序表中的所有元素*/ for(m=0;m(*L).len;m+) printf(%5d,(*L).listm); /*运行结果(5)*/ printf(n); for(m=i;m(*L).len;m+) /*删除位置之后的所有元素依次左移一位*/ (*L).listm=(*L).listm+1; (*L).len-; printf(Output the every element of the seqlist after deleting:n); /*删除后输出顺序表中的所有元素*/ for(m=0;m(*L).len;m+) p
11、rintf(%5d,(*L).listm); /*运行结果(6)*/ printf(n);void insert(seqlist *L,int i,int e) /*在顺序表指定位置i后插入元素e*/ int m; printf(Output the every element of the seqlist before inserting:n); /*插入前输出顺序表中的所有元素*/ for(m=0;m=i;m-) /*插入位置之后的元素依次右移一位*/ (*L).listm+1=(*L).listm; (*L).listi=e; /*在指定位置i上插入元素e*/ printf(Output the every element of the seqlist after inserting:n); /*插入后输出顺序表中的所有元素*/ for(m=0;m(*L).len;m+) printf(%5d,(*L).listm); /*运行结果(8)*/ printf(n);void main() static seqlist *L; int i,e; printf(n-function:create-n); create(L); /*调用函数create建立一个顺序表*/ printf(n-function:access-
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1