1. 设计1 约瑟夫环问题
一、需求分析。
1、利用单向循环链表存储结构模拟此过程,按照出列的顺序印出个人的编号,只适用于一个案例。
具体目标包括:
(1)实现单循环链表的初始化;
(2)理解约瑟夫环的定义,用循环找到每次报数人的序号;
(3)从单循环链表中删除节点,并判断链表空与非空的临界条件。
2、构造一个含有n个元素的单向循环链表。
adt circlelist
数据关系:r=
基本操作:link initlist(int n)
操作结果:构造一个含有n个元素的单向循环链表。
3、程序中,先输入总人数 pn与初始密码sn,再输入输入 n 个正整数,作为这n个人的密码,接下来初始密码 m。
4、测试数据 pn=5 sn=2 ,n 个人的密码依次 = 1 4 6 4 8。 出列为:2 1 3 5 4。
二、概要设计。
1、函数功能在main函数中实现。
void main(void)
int pn, sn,i;
linklist l;
printf("请输入总人数pn,和出示密码sn:")
scanf("%d%d",&pn,&sn);
int a[n];
a[0]=sn;将a[0]保存为初始密码。
printf("请输入%d个人各自所持的密码:",pn);
for(i=1;iscanf("%d",&a[i]);
创建链表。creatlinklist(&l, pn);
报数删人,输出结果。
printf("result:");
deldata(&l,pn,a);
2、程序包括两部分。
1)结点类型。
2)main函数实现约瑟夫环。
三、详细设计。
1、结点类型
typedef struct node
int data;将这一圈人按从1~pn贴上序号。
struct node *next;
node,*linklist;
linklist ",j, p->data,a[j]);
j++;i=p->data;
p->data=p->next->data;
q=p->next;
p->next = p->next->next;
free(q);
void main(void)
int pn, sn,i;
linklist l;
printf("请输入总人数pn,和出示密码sn:")
scanf("%d%d",&pn,&sn);
int a[n];
a[0]=sn;将a[0]保存为初始密码。
printf("请输入%d个人各自所持的密码:",pn);
for(i=1;iscanf("%d",&a[i]);
创建链表。creatlinklist(&l, pn);
报数删人,输出结果。
printf("result:");
deldata(&l,pn,a);
2. 设计2 迷宫问题
一、需求分析。
1.问题描述:
算术表达式与二叉树之间存在着对应关系,编写把以前缀形式输入的合法算术表达式转换为中缀表达式,再转换为后缀表达式,并求表达式的值。
2.具体目标包括:
1) 把前缀表达式转换为中缀表达式;
2) 输出中缀表达式;
3) 把中缀表达式转换为后缀表达式;
4) 利用栈结构实现后缀表达式的求值;
3.栈的抽象数据类型的定义:
adt stack
数据关系:r1=
基本操作:initstack(sqstack *s)
push(sqstack *s,snodeetype e)
pop(sqstack *s,snodeetype *e)
stackempty(sqstack *s)
} adt stack
二、概要设计。
1、主模块(函数功能在main函数中实现)
void main()
流程图12、bitree creatbitree(bitree t)
按前缀形式输入算术表达式。
构造二叉链表表示的二叉树t
char ch;
scanf("%c",&ch);
switch(ch)
return t;
流程图2四、运行结果及分析。
五、总结。本程序主要应用三元组处理矩阵,利用矩阵的加法和乘法求自反闭包、对称闭包和传递闭包。
附:主要源**。
#includestatus enqueue(linkqueue *q,qelemtype e)
插入以e为q的新的队尾元素。
queueptr p;
if(!(p=(queueptr)malloc(sizeof(qnode)))
exit(overflow);
p->data=e; p->next=null;
q->rear->next=p; q->rear=p;
return ok;}
status dequeue(linkqueue *q,qelemtype *e)
删除q的队头元素,用e返回其值。
queueptr p;
p=q->front->next; *e=p->data;
q->front->next=p->next;
if(q->rear==p) q->rear=q->front;
free(p);
return ok;}
status initstack(sqstack *s)
构造一个空栈s
s->base=(selemtype *)malloc(sizeof(selemtype));
if(!s->base)
exit(overflow); 存储分配失败。
s->top=s->base;
return ok;
initstack
void push(sqstack *s,snodeetype e)
插入元素e为新的栈顶元素。
selemtype *e1;
e1=(selemtype *)malloc(sizeof(selemtype));
e1->next=s->top; e1->data=e;s->top=e1;}push
status pop(sqstack *s,snodeetype *e)
若栈不空,则删除s的栈顶元素,用e返回其值,并返回ok,否则返回error
selemtype *e1;
if(s->top ==s->base)
return error;
*e=s->top->data;
e1=s->top;
s->top=s->top->next;
free(e1);
return ok; }
status stackempty(sqstack *s)
判断栈s是否为空,若不空返回true,否者返回false
if(s->top==s->base)
return true;
else return false;}
bitree creatbitree(bitree t)
按前缀形式输入算术表达式。
构造二叉链表表示的二叉树t
char ch;
scanf("%c",&ch);
switch(ch)
case '+
case '-
case '*
case ''
if(!(t=(bitnode *)malloc(sizeof(bitnode)))
exit(overflow);
t->data=ch;
t->lchild=(bitnode *)malloc(sizeof(bitnode));
t->rchild=(bitnode *)malloc(sizeof(bitnode));
t->lchild=creatbitree(t->lchild);
t->rchild=creatbitree(t->rchild);
break;
default:
if(!(t=(bitnode *)malloc(sizeof(bitnode)))
exit(overflow);
t->data=ch; t->lchild=null;
《课程设计说明书》模版
1.设计1 约瑟夫环问题 一 需求分析。1 程序中,先输入人数 n,再输入输入 n 个正整数,作为这 n 个人的密码,接下来初始密码 m。2 2 本程序只适用于一个案例。3 测试数据 m 5 n 2 n 个人的密码依次 1 4 6 4 8。出列为 2 1 3 5 4。二 概要设计。1 函数功能在ma...
课程设计说明书
材料化学。涂装工艺。班级 材料化学081 姓名。学号。指导教师。时间 二 一一年七月八日 19 09 56 目录。表面工程课程设计任务书 1 1 概况 2 1.1 设计任务书及目标 2 1.2 设计任务书 2 1.3 设计单位概况 2 1.4 设计原则 4 1.5 设计范围 4 1.6 设计技术标准...
课程设计说明书
一 题目 离合器接合叉零件加工工艺规程 及车 25外圆及端面夹具设计 二 时间 自年月日至年月日止。三 要求 1 编制离合器接合叉加工工艺规程一套。2 绘制离合器接合叉零件图一张。3 绘制夹具结构装配图一张。4 绘制夹具体图一张。5.编写设计说明书一份。目录。序言1 第一章零件分析2 1.零件的作用...