printf("\n");
printf("\n添加商品编号:
\n");
cin>>p->data.NO;
printf("\n添加商品名称:
\n");
cin>>p->data.name;
printf("\n添加商品数量:
\n");
cin>>p->data.count;
rear->next=p;新结点连接到尾结点之后
rear=p;尾指针指向新结点
printf("继续添加记录?
(yn):
");
cin>>flag;
}
rear->next=NULL;终端结点指针置空
return");
printf("a.按商品编号查询\n");
printf("b.按商品名称查询\n");
printf("==================\n");
printf("请选择:
");
p=>>pp;
getchar();
if(pp=='a'||pp=='A')
{
printf("请输入要查找的商品编号:
");
cin>>num;
while(p&&strcmp(p->data.NO,num)<0)p=p->next;
if((p==NULL)||strcmp(p->data.NO,num)>0)p=NULL;没有查到要查找的通讯信息
}
else
if(pp=='b'||pp=='B')
{
printf("请输入要查找的商品名称:
");
cin>>name;
while(p&&strcmp(p->data.name,name)!
=0)p=p->next;
}
returnp;
}
********仓库管理链表上的结点删除*****************
voidDelNode(LinkList");
return;
}
if(p!
=NULL)printf("真的要删除该商品吗?
(yn):
");
cin>>jx;
if(jx=='y'||jx=='Y')
{
q=");
}
}
********仓库管理链表的输出函数**********
voidPrintList(LinkList");
printf("\n");
while(p!
=NULL)
{
printf("%15s%20s%23s\n",p->data.NO,p->data.name,p->data.count);
printf("\n");
p=p->next;后移一个结点
}
}
voidmain()
{
intchoice,j=1;
charChoice;
while(j)
{
printf("\n\n\n\n\n");
printf("\t\t\t\t仓库管理系统\n");
printf("\n\t\t\t******************************");
printf("\n\t\t\t*1---仓库管理链表建立*");
printf("\n\t\t\t*2---仓库管理链表插入*");
printf("\n\t\t\t*3---仓库管理链表查询*");
printf("\n\t\t\t*4---仓库管理链表删除*");
printf("\n\t\t\t*5---仓库管理链表输出*");
printf("\n\t\t\t*0---退出仓库管理系统*");
printf("\n\t\t\t******************************");
printf("\n\t\t\t请选择菜单号(0--5):
");
cin>>choice;
getchar();
switch(choice)
{
case1:
{
printf("**********************************\n");
printf("*仓库管理链表建立*\n");
printf("**********************************\n");
");
printf("*仓库管理链表插入*\n");
printf("**********************************\n");
printf("商品编号(10)商品名称(30)商品数量\n");
printf("*************************************\n");
p=(ListNode*)malloc(sizeof(ListNode));申请新结点
printf("\n添加商品编号:
\n");
cin>>p->data.NO;
printf("\n添加商品名称:
\n");
cin>>p->data.name;
printf("\n添加商品数量:
\n");
cin>>p->data.count;
InsertNode(");
printf("*仓库管理链表查询*\n");
printf("***********************************\n");
p=ListFind(");
printf("--\n");
printf("%s,%s,%s\n",p->data.NO,p->data.name,p->data.count);
printf("---\n");
}
elseprintf("没有查到要查询的商品信息!
\n");
}
break;
}
case4:
{
if(flag1!
=1){printf("请先建立表!
");Sleep(1500);}
else
{
printf("***********************************\n");
printf("*仓库管理链表删除*\n");
printf("***********************************\n");
DelNode(");
printf("*仓库管理链表输出*\n");
printf("************************************\n");
PrintList(输入有错,请重新输入!
\n");Sleep(1500);system("cls");break;
}
}
}
二、通讯录管理系统
1.题目要求
通讯录一般包括通讯者的编号、姓名、性别、电话及地址等信息,设计一个通讯录要求实现通讯者的插入、查询、删除、更新、排序操作。
structnode
{
charnum[5];编号
charname[8];姓名
charsex;性别
chartel[8];电话
charaddress[100];地址
};
2.应用程序功能
开始运行时界面如下:
通讯录链表建立界面如下:
通讯录链表插入界面如下:
通讯录链表查询界面如下:
按编号查询界面如下:
按姓名查询编号如下:
通讯录链表删除界面如下:
通讯录链表输出界面如下:
3.输入数据类型、格式和内容限制
输入数据类型为字符型,但在输入过程中不可包含空格,如输入地址过程中不可出现空格!
4.主要算法模块描述
流程图:
5.源程序代码
#includeprintf("\n");
printf("\n添加的编号:
\n");
cin>>p->data.num;
printf("\n添加的姓名:
\n");
cin>>p->data.name;
printf("\n性别:
\n");
cin>>p->data.sex;
printf("\n电话:
\n");
cin>>p->data.phone;
printf("\n地址:
\n");
cin>>p->data.addr;
rear->next=p;新结点连接到尾结点之后
rear=p;尾指针指向新结点
printf("继续建表?
(yn):
");
cin>>flag;
}
rear->next=NULL;终端结点指针置空
return");
printf("a.按编号查询\n");
printf("b.按姓名查询\n");
printf("==================\n");
printf("请选择:
");
p=>>pp;
if(pp=='a'||pp=='A')
{
printf("请输入要查找者的编号:
");
cin>>num;
while(p&&strcmp(p->data.num,num)<0)p=p->next;
if((p==NULL)||strcmp(p->data.num,num)>0)p=NULL;没有查到要查找的通讯信息
}
else
if(pp=='b'||pp=='B')
{
printf("请输入要查找者的姓名:
");
cin>>name;
while(p&&strcmp(p->data.name,name)!
=0)p=p->next;
}
returnp;
}
********通讯录链表上的结点删除*****************
voidDelNode(LinkList");
return;
}
elseif(p!
=NULL)
{
printf("真的要删除该结点吗?
(yn)");
cin>>cho;
if(cho=='y'||cho=='Y')
{
q=");
}
}
}
********通讯录链表的输出函数**********
voidPrintList(LinkList");
printf("\n");
while(p!
=NULL)
{
printf("%s,%s,%s,%s,%s\n",p->data.num,p->data.name,p->data.sex,p->data.phone,p->data.addr);
printf("\n");
p=p->next;后移一个结点
}
}
voidmain()
{
intchoice,j=1;
while(j)
{
printf("\n\n\n\n\n");
printf("\t\t\t\t通信录链表\n");
printf("\n\t\t\t******************************");
printf("\n\t\t\t*1---通信录链表建立*");
printf("\n\t\t\t*2---通信录链表插入*");
printf("\n\t\t\t*3---通信录链表查询*");
printf("\n\t\t\t*4---通信录链表删除*");
printf("\n\t\t\t*5---通信录链表输出*");
printf("\n\t\t\t*0---退出管理系统*");
printf("\n\t\t\t******************************");
printf("\n\t\t\t请选择菜单号(0--5):
");
cin>>choice;
getchar();
switch(choice)
{
case1:
{
printf("**********************************\n");
printf("*通讯录链表的建立*\n");
printf("**********************************\n");
");
printf("*通讯者信息的添加*\n");
printf("**********************************\n");
printf("编号(4)姓名(8)性别(3)电话(11)地址(31)\n");
printf("*************************************\n");
p=(ListNode*)malloc(sizeof(ListNode));申请新结点
printf("\n添加的编号:
\n");
cin>>p->data.num;
printf("\n添加的姓名:
\n");
cin>>p->data.name;
printf("\n性别:
\n");
cin>>p->data.sex;
printf("\n电话:
\n");
cin>>p->data.phone;
printf("\n地址:
\n");
cin>>p->data.addr;
InsertNode(");
printf("*通讯录信息的查询*\n");
printf("***********************************\n");
p=ListFind(");
printf("--\n");
printf("%s,%s,%s,%s,%s\n",p->data.num,p->data.name,p->data.sex,p->data.phone,p->data.addr);
printf("---\n");
}
elseprintf("没有查到要查询的通讯者!
\n");
}
break;
}
case4:
{
if(flag1!
=1){printf("请先建立表!
");Sleep(1500);}
else
{
printf("***********************************\n");
printf("*通讯录信息的删除*\n");
printf("***********************************\n");
DelNode(");
printf("*通讯录链表的输出*\n");
printf("************************************\n");
PrintList(输入有错,请重新输入!
\n");Sleep(1500);system("cls");break;
}
}
}
三、猴子选大王
1.题目要求:
任务:
一堆猴子都有编号,编号是1,2,3...m,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。
要求:
输入数据:
输入m,nm,n为整数,n输出形式:
中文提示按照m个猴子,数n个数的方法,输出为大王的猴子是几号,建立一个函数来实现此功能。
2.应用程序功能
程序运行结果如下:
3.输入数据类型、格式和内容限制
输入数据为整型,切勿输入整形以外数据类型,否则程序将报错。
4.主要算法模块描述
流程图:
5.源程序代码
#include"iostream"
#include"stdlib.)
{
inti;
p=;i++)
{将猴子顺序编号
q=(ListNode*)malloc(sizeof(ListNode));
q->data=i;
p->next=q;
p=q;
p->next=NULL;
}
return,inti)
{
intj,k;
ListNode*pp,*t;*删除节点前驱*
p=i;
while(i!
=1)
{
for(j=0;j{数到第n个猴子
pp=p;
p=p->next;
if(!
p)p=k;返回最后一只猴子编号
}
voidmain()
{
inti,c,k,flag=0;
cout<<"请输入猴子数量"<cin>>i;
cout<<"--将猴子顺序编号--"<printlist(Create(i));调用将猴子顺序编号的函数
cout<while(!
flag)
{
cout<<"第几个猴子离开?
"<cin>>c;
if(c>i)cout<<"输入数量大于猴子数量,请重新输入"<if(c
}
k=King(");
return;
}
elseif(xdata)
p=p->lchild;
else
p=p->rchild;
}
if(xdata)
q->lchild=s;
else
q->rchild=s;
}
*=============将二叉树叶子结点利用指针rchild生成单链表=====================*
voidPreOrderTraverse(liuyu*root)
{
liuyu*n;
n=root;
if(!
n)return;
if(n->lchild==NULL&&n->rchild==NULL)
{判断叶子结点并利用指针rchild生成单链表
;
;
return;
}
if(n->lchild)PreOrderTraverse(n->lchild);
if(n->rchild)PreOrderTraverse(n->rchild);
return;
}
************查找二叉树第最左边第一个叶子结点********
liuyuFinFLea(liuyu*root)
{
liuyu*n;
n=root;
if(n->lchild==NULL&&n->rchild==NULL)
{查找最左边第一个叶子结点,在链表输出时调用
first=n;
}
if(n->lchild){n=n->lchild;FinFLea(n);}
elseif(n->rchild){n=n->rchild;FinFLea(n);}
return*first;
}
******************递归输出二叉树*****************
voidprinttree(liuyu*root)
{
if(root)cout<data<<"";