数据结构经典题目及c语言代码Word格式文档下载.docx
《数据结构经典题目及c语言代码Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构经典题目及c语言代码Word格式文档下载.docx(49页珍藏版)》请在冰豆网上搜索。
inti=1;
pPrev=pHead;
while(--count>
0)
{
pCurr=(RingNodePtr)malloc(sizeof(RingNode));
i++;
pCurr->
pos=i;
pPrev->
next=pCurr;
pPrev=pCurr;
}
next=pHead;
//构成环状链表
}
voidKickFromRing(RingNodePtrpHead,intn)
RingNodePtrpCurr,pPrev;
//计数
pCurr=pPrev=pHead;
while(pCurr!
=NULL)
if(i==n)
//踢出环
printf("
\n%d"
pCurr->
pos);
//显示出圈循序
next=pCurr->
next;
free(pCurr);
pCurr=pPrev->
i=1;
pCurr=pCurr->
if(pPrev==pCurr)
//最后一个
\nKingis%d"
break;
intmain()
intn=0,m=0;
RingNodePtrpHead=NULL;
M(personcount)="
);
scanf("
%d"
&
m);
N(outnumber)="
n);
if(m<
=0||n<
=0)
InputError\n"
return0;
//建立链表
pHead=(RingNodePtr)malloc(sizeof(RingNode));
pHead->
pos=1;
next=NULL;
CreateRing(pHead,m);
//开始出圈
\nKickOrder:
"
KickFromRing(pHead,n);
\n"
system("
pause"
//数组做:
#include<
string.h>
voidSelectKing(intMonkeyNum,intCallNum);
voidmain()
intMonkeyNum;
intCallNum;
/*输入猴子的个数*/
MonkeyNum="
MonkeyNum);
/*输入M的值*/
CallNum="
CallNum);
SelectKing(MonkeyNum,CallNum);
voidSelectKing(intMonkeyNum,intCallNum)
int*Monkeys;
//申请一个数组,表示所有的猴子;
intcounter=0;
//计数,当计数为猴子个数时表示选到最后一个猴子了;
intposition=0;
//位置,数组的下标,轮流遍历数组进行报数;
inttoken=0;
//令牌,将报数时数到M的猴子砍掉;
//申请猴子个数大小的数组,把桌子摆上。
Monkeys=(int*)malloc(sizeof(int)*MonkeyNum);
if(NULL==Monkeys)
Somanymonkeys,systemerror.\n"
return;
//将数组的所有内容初始化为0,被砍掉的猴子设置为1
memset(Monkeys,0,sizeof(int)*MonkeyNum);
//循环,直到选中大王
while(counter!
=MonkeyNum)
//如果这个位置的猴子之前没有砍掉,那么报数有效
if(Monkeys[position]==0)
token++;
//成功报数一个,令牌+1,继续报数直到等于M
//如果报数到M,那么将这个猴子砍去
if(token==CallNum)
Monkeys[position]=1;
//设置为1,表示砍去
counter++;
//计数增加
token=0;
//设置为0,下次重新报数
//如果是最后一个猴子,把它的位置打印,这个就是大王了
if(counter==MonkeyNum)
Thekingisthe%dmonkey.\n"
position+1);
//下一个猴子报数
position=(position+1)%MonkeyNum;
//释放内存,开头为所有猴子创建的桌子
free(Monkeys);
题目2:
字符逆转(学时:
从键盘读入一个字符串,把它存入一个链表(每个结点存储1个字符),并按相反的次序将字符串输出到显示屏。
structnode
structnode*prev;
charc;
structnode*next;
};
structnode*input(structnode*top);
intmain(void)
structnodeT,*top=&
T,*bottom=&
T,*p=NULL;
T.prev=NULL;
T.next=NULL;
T.c='
\0'
;
bottom=input(top);
p=bottom->
prev;
while(p!
=NULL)
%c"
p->
c);
p=p->
structnode*input(structnode*top)
structnode*t;
charx;
while((x=getchar())!
='
\n'
)
top->
c=x;
t=(structnode*)malloc(sizeof(structnode));
next=t;
t->
prev=top;
next=NULL;
c='
top=top->
returntop;
题目3:
工资核算(学时:
设有一个单位的人员工资有如下信息:
name、department、basepay、allowance、total。
现从键盘输入一组人员工资数据并将它们存储到名为paydata的文件中;
再从paydata取出工资数据并给每个人的basepay增加100元,增加后将工资数据显示于屏幕(每行1人)。
#defineSIZE2
#defineLENTHsizeof(structstuff)
structstuff
{
charname[100];
chardepartment[100];
intbasepay;
intallowance;
inttotal;
}stuff[SIZE];
main()
FILE*fp;
inti;
Pleaseenternamedepartmentbasepayallowance:
for(i=0;
i<
SIZE;
i++)
%s%s%f%f"
&
stuff[i].name,&
stuff[i].department,&
stuff[i].basepay,&
stuff[i].allowance);
if((fp=fopen("
paydata.dat"
"
wb"
))==NULL)
{
Can'
topenfile\n"
}
if(fwrite(&
stuff[i],LENTH,1,fp)!
=1)
文件写入出错\n"
fclose(fp);
rb"
printf("
修改过后的结果:
fread(&
stuff[i],LENTH,1,fp);
stuff[i].total=stuff[i].basepay+100+stuff[i].allowance;
%-10s%-10s%f%f%f\n"
stuff[i].name,stuff[i].department,stuff[i].basepay+100,stuff[i].allowance,stuff[i].total);
fclose(fp);
return0;
题目4:
满足条件的有序表生成(学时:
已知三个有序表A、B、C,它们皆由同一类元素构成,现要求对于表A作以下运算而获得有序表D:
排出A中所有的既在B中又在C中出现的元素。
另外该任务要求具有建立有序表功能以及输出有序表到屏幕的功能。
inta[7],b[5],c[6],d[7];
inti,j,k