实验报告
——实验1
学院:自动化学院
班级:自动化2班
学号:1320110130
姓名:赵帅
一、实验目的 :理解抽象数据类型的定义;学会用c语言实现对线性循环链表的基本操作;
二、实验内容
采用单向环表实现约瑟夫环。
三、程序设计
1、概要设计:
(说明程序中用到的抽象数据类型定义,宏定义,主程序的流程以及各个程序模块之间的调用关系,给出主要流程图 )
抽象数据类型定义:
ADT List{
数据对象:D={ai|ai∈ElemSet, i=1,2, …,n, n≥0}
数据关系:R1={ 基本操作: Creat(m) 操作结果:创见一个具有m个结点的单向环表; } 宏定义:无; 流程图: 四、程序调试分析 (程序运行中遇到的问题与改正措施,以及对程序调试的体会与收获 ) 局部变量和全局变量的使用;一些简单的语法错误; 细节决定成败,养成良好的变成习惯十分重要。 五、用户使用说明 (说明如何使用你的程序,给出操作步骤) 打开软件,待显示器上出现“请输入单向环表的结点数:”后:输入想要建立环表的结点数,按“enter”键结束。显示器上显示“请输入计数起点和间隔:”后,输入想要计数的起点按回车键后输入间隔数,按“enter”结束。若显示器上显示“您输入的数据有误!”时说明你输入的为无效数据请查证。 六、程序运行结果 (列出测试结果,包括输入和输出,最好给出2个测试结果) 1, 请输入单向环表的结点数:10 请输入计数起点和间隔:3 4 输出序列为: 6 10 4 9 5 2 1 3 8 7 2,请输入单向环表的结点数:10 请输入计数起点和间隔:12 4 您输入的数据有误! 七、程序清单 (要求给函数加上注释) #include "stdlib.h" #include struct ele { int no; struct ele *link; }; struct ele *h, *u;//声明全局变量 struct ele Creat(m) { int i; h = u = (struct ele *) malloc(sizeof(struct ele));/*形成首表元*/ h->no = 1; for (i = 2; i <= m; i++)/*形成其余的m-1个表元*/ { u->link = (struct ele *) malloc(sizeof(struct ele)); u = u->link; u->no = i;/*第i个表元置编号i*/ } u->link = h;/*末表元后继首表元,形成环*/ } main() { struct ele *p,*q; int n, m, i,s; printf("请输入单向环表的结点数:"); scanf("%d", &m);/*输入n和m*/ Creat(m); printf("请输入计数起点和间隔:"); scanf("%d %d", &s,&n); if (s<1||s>m) printf ("您输入的数据有误"); else { printf("输出序列为:\\n"); p=h; for (i = 1; i < s-1; i++) p = p->link; /*掠过前s-1个表元*/ while (m) { for (i = 1; i < n; i++) p = p->link; /*掠过n-1个表元*/ q= p->link; /*p指向第n个表元*/ p->link = q->link;/*第n个表元从环中脱钩*/ printf("%4d", q->no); free(q);/*释放第n个表元占用的空间*/ m--; } } printf("\\n"); }