沈阳航空航天大学课程设计报告
③继续选择2,输入下列数据测试: 请输入总人数n:8 请输入开始上限数m:14
请依次输入每个人的密码:3 4 5 6 7 8 9 10 出队顺序:6 7 2 8 3 5 1 4
14
沈阳航空航天大学课程设计报告
测试完成,选择0退出。.
图3.5 约瑟夫环测试3
15
沈阳航空航天大学课程设计报告
参考文献
[1] 严蔚敏,吴伟民.数据结构[M].北京:清华大学出版社,2007. [2] 张长海,陈娟.C程序设计[M].北京:高等教育出版社,2004. [3] 谭浩强.C程序设计[M].北京:清华大学出版社,2005..
[4]严蔚敏,吴伟民.《数据结构题集(C语言版)》.清华大学出版社.
[5]《DATA STRUCTURE WITH C++》. William Ford,William Topp .清华大学出版社(影印版).
附 录(关键部分程序清单)
程序代码 {
#include
#include
typedef struct LNode//定义单循环链表中节点的结构 {
int num;//编号 int pwd;//password
struct LNode *next;//指向下一结点的指针
}LNode; /*构造结点*/
LNode *createNode(int m_num,int m_pwd) {
LNode *p;
p=(LNode *)malloc(sizeof(LNode));//生成一个结点
16
沈阳航空航天大学课程设计报告
}
p->num=m_num;//把实参赋给相应的数据域 p->pwd=m_pwd;
p->next=NULL;//指针域为空 return p;
/**创建循环链表**/
void createList(LNode **ppHead,int n)
{/*创建单向循环链表ppHead,人数个数为n,并输入每个人的密码值,若 建立失败则生成头结点,让cur指向他,若建立成功则插入结点P,cur指 向的数据元素为p,后续为\空\的节点,再把P插入循环链表ppHead中*/
int i,m_pwd;
LNode *p,*cur;//cur:浮标指针 for(i=1;i<=n;i++) {
printf(\输入第%d个人的密码:\scanf(\输入持有密码 p=createNode(i,m_pwd);//调用构造结点函数 if(*ppHead==NULL)//如果头结点为空 { }
else//如果不为空,则插入结点 {
p->next = cur->next; cur->next = p;
cur= p;//cur指向新插入结点
*ppHead=cur=p;//生成头结点,让cur指向他 cur->next=*ppHead;//cur的指针域指向自身
17
沈阳航空航天大学课程设计报告
}
}
}
printf(\完成创建!\\n\提示链表创建完成
/*出队处理*/
void jose(LNode *ppHead,int m_pwd)
{/*p指向要删除节点的前一个节点,ppHead指向要删除的节点,使p=ppHead,ppHead再指向要删除节点的下一个节点,使p和ppHead链接,输出p指向节点的编号和密码值,释
放ppHead,如此循环,直至把所有节点都打印和删除为止!*/
int i,j;
LNode *p,*p_del;//定义指针变量 for(i=1;p!=ppHead;i++){
for(j=1;j p->next = ppHead->next;//p结点与头结点链接 i=ppHead->pwd;//i赋值为ppHead->pwd j=ppHead->num;//j赋值为ppHead->num,j为要删除的密码值 printf(\第%d个人出列,密码:%d\\n\ m_pwd=ppHead->pwd;//m_pwd赋值为ppHead->pwd free(ppHead);//释放头结点 ppHead=p->next;//ppHead重新赋值给p->next,即释放前的ppHead->pwd指 p=ppHead;//p赋值为ppHead,p指向要删除结点的前一个结点 ppHead=ppHead->next;//ppHead指向下一个元素 针//删除报数结点 } i=ppHead->pwd;//i赋值为ppHead->pwd j=ppHead->num;//j赋值为ppHead->num 18