数据结构上机答案(c语言版)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实习一:

1、编写一个读入一个字符串,把它存入一个链表,并按相反的次序打印的程序。

2、设有一个单位的人员工资有如下信息:name、department、 base pay、allowance、total。现从键盘输入一组人员工资数据并将它们存储到名为paydata的文件中;再从paydata取出工资数据并给每个人的base pay增加100元,增加后将工资数据显示于屏幕(每行1人)。请编写能够完成上述工作的程序。

代码如下:

1.#include

#include

#include

void main()

{

char x;

struct node //定义个结构node

{

char c;

struct node *next;

};

struct node *head,*pb,*pf,*p,*s,*t; //定义指针

printf("请输入字符串,按Enter结束!\n");

for(int i=0;x!='\n';i++)

{

pb=(struct node *)malloc(sizeof(struct node));//动态分配n字节的内存空间

scanf("%c",&pb->c); //输入字符

x=pb->c;

if(i==0){ //输入的首个字符作为头结点pf

head=pb;

pf=head;}

else if(pb->c!='\n'){ //如果输入的是Enter,输入终止,否则把字符依次存入链表

pf->next=pb; //把输入的字符pb存在pf后,pb后为空

pb->next=NULL;

pf=pb;//pb赋给pf,重复上述操作

p=head;}

}

for(;p!=NULL;p=p->next)

s=p; //把指向链表的最后一个字符的指针赋给s

printf("输出结果为:\n");

printf("%c",s->c);//输出链表的最后一个字符

for(p=head;s!=head;)//若s==head,该链表只有一个字符。重置p为头结点{

for(p=head;p!=s;p=p->next)

t=p;

s=t;

printf("%c",t->c);

}

printf("\n");

}

2.#include

#include

#include

//#define SIZE 4

void main()

{ struct Worker{ //定义链表结构

char name[40];

char department[40];

int basepay;

int allowance;

int total;

struct Worker *next;

}; struct Worker *p;////定义链表头指针,全局变量

struct Worker worker[4];

p=(struct Worker *)malloc(sizeof(struct Worker));//为链表头结点分配内存int i;

FILE *fp;

if((fp=fopen("paydata.txt","wb"))==NULL)

{ printf("cannot open file\n");

return;

}

printf("请输入员工的姓名,部门,底薪,津贴\n");

for(i=0;i<4;i++){

scanf("%s%s",&worker[i].name,&worker[i].department);

scanf("%d%d",&worker[i].basepay,&worker[i].allowance);

struct Worker *pb;

pb=&worker[i];

struct Worker *head;

if(i==0){

head=pb;

p=head;

}else {

p->next=pb;

pb->next=NULL;

p=pb;

}

} for(i=0;i<4;i++)

if(fwrite(&worker[i],sizeof(struct Worker),1,fp)!=1)

printf("file write error\n");

fclose(fp);

fp=fopen("paydata.txt","rb");

printf("姓名部门底薪津贴总工资\n");

for(i=0;i<4;i++)

{ fread(&worker[i],sizeof(struct Worker),1,fp);

printf("%2s%6s%6d%6d%6d",worker[i].name,worker[i].department,worker[i ].basepay+100,worker[i].allowance,worker[i].allowance+worker[i].basepay+100) ;

printf("\n");

}

fclose(fp);

}

实习二:

试分别用线性表的向量存储结构和链表存储结构来实现约瑟夫(Josephu)问题。约瑟夫问题如下:

设有n个人围坐圆桌周围。从某个位置上的人开始从1报数,数到m的人便出列,下一个人(第m+1个)又从1报数开始,数到m的人便是第2个出列的人,依次类推,直到最后一个人出列为止,这样就可以得

到一个人员排列的新次序。例如,n=8,m=4,从第1个人数起,得到的新次序为48521376.

代码如下:

链表存储结构:

#include

#include

#include

相关文档
最新文档