高等学校计算机实践教学用书 《数据结构》实验指导书 将亮条移至 Errors或 Warnings处,回车后,在 Break Make On右边及 出现此选项,如图: Break Make On Errors 这时,当编译的几个文件只要出现一个错误时,就立即停止编辑,亮条 停在出错处,指示用户进行修改 B、望所有文件的所有错误都找出以后,在修改错误,可用以下方法: 在 break make on”子窗口中,将亮条移至 fatal errors或link处,此 时 break make on右边出现的是 fatal errors或link。这样,在编译出现错 误后,才停止编译,用户这时在修改源文件 (6)、运行 编译链结完成一个文件后,可利用主菜单的“run”命令或直接使用ctrl +F9来运行程序。其实当用户认为自己的源程序不会有编译,链结错误时, 在源程序编译完成后,可以直接用“run”命令或直接按crtH+F9键,这时它 会一次完成编译链结到运行的全过程 程序运行后,仍回到tc屏,这时若想看运行结果,可以用“run菜单的 user screen”命令,也可直接按alt+F5键,转到用户屏。 File edit run compile project options debug break/watch 1 ctrl+F9 Program reset ctrl+f2 Go to cursor f4 Step over f8 alt+F5 看完后,按任意键回到TC屏 关于 Turbo C的更详细的信息,请参阅 Turbo C手册,或使用F1帮助 联机系统。 西南科技大学计算机科学学院
高等学校计算机实践教学用书 ★ 《数据结构》实验指导书 西南科技大学 计算机科学学院 6 将亮条移至 Errors 或 Warnings 处,回车后,在 Break Make On 右边及 出现此选项,如图: Break Make On Errors 这时,当编译的几个文件只要出现一个错误时,就立即停止编辑,亮条 停在出错处,指示用户进行修改。 B、望所有文件的所有错误都找出以后,在修改错误,可用以下方法: 在”break make on”子窗口中,将亮条移至 fatal errors 或 link 处,此 时:break make on 右边出现的是 fatal errors 或 link。这样,在编译出现错 误后,才停止编译,用户这时在修改源文件。 (6)、运行 编译链结完成一个文件后,可利用主菜单的“run”命令或直接使用 ctrl +F9 来运行程序。其实当用户认为自己的源程序不会有编译,链结错误时, 在源程序编译完成后,可以直接用“run”命令或直接按 crtl+F9 键,这时它 会一次完成编译链结到运行的全过程。 程序运行后,仍回到 tc 屏,这时若想看运行结果,可以用“run”菜单的 “user screen”命令,也可直接按 alt+F5 键,转到用户屏。 File edit run compile project options debug break/watch Run ctrl+F9 Program reset ctrl+f2 Go to cursor f4 Trace into f7 Step over f8 User screen alt+F5 看完后,按任意键回到 TC 屏。 关于 Turbo C 的更详细的信息,请参阅 Turbo C 手册,或使用 F1 帮助 联机系统
高等学校计算机实践教学用书 《数据结构》实验指导书 实验 线性表 实验目的 掌握用C语言上机调试线性表的基本方法 2、掌握线性表基本操作,插入、删除、查找,以及线性表合并等运算 在顺序存储结构和链接存储结构上的运算。 、实验内容 题目 线性表基本操作的实现 [问题描述] 当我们要在线性表的顺序存储结构上的第i个位置上插入一个元素时 必须先将线性表中第i个元素之后的所有元素依次后移一个位置,以便腾空 一个位置,再把新元素插入到该位置。若欲删除第i个元素时,也必须把第 i元素之后的所以元素前移一个位置 [基本要求] 要求生成线性表时,可以键盘输入读取元素,用顺序存储结构和链式存 储结构实现存储 [实现提示] 要实现基本操作可用已实现的基本操作,也可设计简单的算法实现 [算法实现] typedef null typedef int datatype #define maxsize 1024 typedef struct datatype data[ maxsize];/*定义线性表是向量,第一结点是 data[o]*/ int last /*插入函数米/ ert(L,x,i)/*将新结点x插入到顺序表1第i个位置 sequenlist *L /*1是 sequenlist类型的指针变量 i int j if ((=1).last==maxsize-1) printf(“ overflow”) return null: F f(i<1)|(i>(*1).last+1) printf(“ 西南科技大学计算机科学学院
高等学校计算机实践教学用书 ★ 《数据结构》实验指导书 西南科技大学 计算机科学学院 7 实验一 线性表 一、实验目的 1、掌握用 C 语言上机调试线性表的基本方法。 2、掌握线性表基本操作,插入、删除、查找,以及线性表合并等运算 在顺序存储结构和链接存储结构上的运算。 二、实验内容 题目一 线性表基本操作的实现 [问题描述] 当我们要在线性表的顺序存储结构上的第 i 个位置上插入一个元素时, 必须先将线性表中第 i 个元素之后的所有元素依次后移一个位置,以便腾空 一个位置,再把新元素插入到该位置。若欲删除第 i 个元素时,也必须把第 i 元素之后的所以元素前移一个位置。 [基本要求] 要求生成线性表时,可以键盘输入读取元素,用顺序存储结构和链式存 储结构实现存储。 [实现提示] 要实现基本操作可用已实现的基本操作,也可设计简单的算法实现 [算法实现] typedef null 0; typedef int datatype; #define maxsize 1024; typedef struct { datatype data[maxsize]; /*定义线性表是向量,第一结点是 data[0]*/ int last; }sequenlist; /*插入函数*/ int insert(L,x,i) /*将新结点 x 插入到顺序表 l 第 i 个位置 sequenlist *L; /*l 是 sequenlist 类型的指针变量 int i; { int j; if ((*l).last==maxsize-1) { printif(“overflow”); return null;} else if((i<1)||(i>(*l).last+1) { printf(“error”);
高等学校计算机实践教学用书 《数据结构》实验指导书 return null: 1 else for(j=(*1),1ast;j》=i-1;j-) (*1).data[j+1](*1).data[j;/*结点后移 (*1).data[i-1]=x; /*插入x (*1).1ast+1;} /*表长加一 return (1) /*删除运算 int delete(L,i)/*删除第i个结点 list料; if(i<1)|1(i)(米).1ast+1) print error return null; els i for (j=i; j<=(*L). last: j++) (*1). data[j-1=(*L). datalj] (L). last--;i (1) 体*生成线性表 id ceatlistO sequentlist’L printi(“请输入n个数据n”) for(i=0, i<n, i+) { printf("data[%d]=”,n) scanf("%od&(L)&datai) (L). last=n-1 printf("n 体*输出线性表 printout(L) querist FL 西南科技大学计算机科学学院
高等学校计算机实践教学用书 ★ 《数据结构》实验指导书 西南科技大学 计算机科学学院 8 return null;} else { for(j=(*l).last;j>=i-1;j--) (*l).data[j+1](*l).data[j]; /*结点后移 (*l).data[i-1]=x; /* 插入 x (*l).last+1; } /*表长加一 return (1); } /*删除运算 int delete(L,i)/*删除第 i 个结点 sequenlist *L; int i; { int j; if((i<1)||(i>(*L).last+1) { printf(“error”); return null; } else { for (j=i;j<=(*L).last;j++) (*l).data[j-1]=(*L).data[j]; (*L).last--; } return (1); } /*生成线性表 void ceatlist() { sequentlist *L; int n,i,j; printf(“请输入 n 个数据\n”); scanf(“%d”,&n); for(i=0,i<n,i+); { printf(“data[%d]=”,i); scanf(“%d”&(*L).&data[i]); } (*L).last=n-1; printf(“”\n”); } /*输出线性表 printout(L) sequenlist *L;
高等学校计算机实践教学用书 《数据结构》实验指导书 for(i=0; I<(*L).last; i++) printf("%d", (L). data[)); *主程序开始 i sequenlist *L; Int 1.t: printf("i I 插入元素n printf("dD:删除元素n”); printf(" q C:退出元素n”) i do i do(cmd=getchar(; i while((cmdl=d )l(cmd =D')Kcmdl=q)l(cmd!=Q)Icm d!=i)川‖(cmd!=D) switch(cmd case 1’,Ii f(&i); insert(L, I) printout(L); case‘d f(&i) delete(L, i) i while(cmd!=q(cmd=D')) 题目二约瑟夫问题求解 [问题描述] 设有n个人围坐一圈,现从某个人开始报数,数到m的人出列,接着 从出列的下一个人开始重新报数,数到的M人又出列,如此下去,直到所 有的人出列为止,试设计确定他们的出列次序序列的程序。 [基本要求] 西南科技大学计算机科学学院
高等学校计算机实践教学用书 ★ 《数据结构》实验指导书 西南科技大学 计算机科学学院 9 { int i; for(i=0;i<(*L).last;i++) { printf(“data[%d]=”,i); printf(“%d”,(*L).data[i]); } } /*主程序开始 main() { sequenlist *L; char cmd’ int i,t; clscr(); printf(“i I : 插入元素\n”); printf(“d D : 删除元素\n”); printf(“q Q : 退出元素\n”); do { do { do{cmd=getchar(); }while((cmd!=’d’)||(cmd!=’D’)||(cmd!=’q’)||(cmd!=’Q’)||(cm d!=’i’)||(cmd!=I)); switch(cmd) { case ‘i’,’I’: scanf(&i); insert(L,i); printout(L); break; case ‘d’,’D’: scanf(&i); delete(L,i); printout(L); break; } }while((cmd!=’q’||(cmd!=’D’)); } 题目二 约瑟夫问题求解 [问题描述] 设有 n 个人围坐一圈,现从某个人开始报数,数到 m 的人出列,接着 从出列的下一个人开始重新报数,数到的 M 人又出列,如此下去,直到所 有的人出列为止,试设计确定他们的出列次序序列的程序。 [基本要求]
高等学校计算机实践教学用书 《数据结构》实验指导书 选择单向循环链表作为存储结构模拟整个过程,并依次输出出列的各人 的编号。 实现提示] 程序运行之后,首先要求用户指定初始报数的上限值,可以n<=30,此 题中循环链表可不设头结点,而且必须注意空表和非空表的界限。如:n=8 m=4时,若从第一个人开始,设每个人的编号依次1、2、3、4.开始报数, 则得到的出列次序为48521376。 [程序实现] struct node nun struct node *next i linklist 建立链表 linklist* creat(head,n)/使n个人围成一圈,并给每个人标志号数 linklist *head t linklist *s, *p; s=malloc(sizeof(linklist) for(i=2 i<=n, i++) i s=malloc(sizeof(linklist) S->num=l p->nexts return head linklist *select(head, m) linklist *head i linklist *p, *q; 1,t; p=head; t=l P-q /°q为p的前驱指针 西南科技大学计算机科学学院
高等学校计算机实践教学用书 ★ 《数据结构》实验指导书 西南科技大学 计算机科学学院 10 选择单向循环链表作为存储结构模拟整个过程,并依次输出出列的各人 的编号。 [实现提示] 程序运行之后,首先要求用户指定初始报数的上限值,可以 n<=30,此 题中循环链表可不设头结点,而且必须注意空表和非空表的界限。如:n=8, m=4 时,若从第一个人开始,设每个人的编号依次 1、2、3、4…开始报数, 则得到的出列次序为 4 8 5 2 1 3 7 6。 [程序实现]: struct node { int num; struct node *next; } linklist; /*建立链表 linklist *creat(head,n)/使 n 个人围成一圈,并给每个人标志号数 linklist *head int n; { linklist *s, *p; int i; s=malloc(sizeof(linklist)); head=s; s->num=1; p=s; for(i=2;i<=n;i++); { s=malloc(sizeof(linklist)); s->num=i; p->next=s; p=s; } p->next=head; return head; } linklist *select(head,m) linklist *head; int m; { linklist *p , *q; int i, t; p=head;t=1; p=q; /*q 为 p 的前驱指针