数据结构实验一

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

数据结构实验报告

实验一

班级 :06111504

学号 :**********

** :***

1.实验题目:

采用单向环表实现约瑟夫环。

请按以下要求编程实现:

①从键盘输入整数 m,通过 create函数生成一个具有 m 个结点的单向环表。环表中的结点编号依次为 1, 2,⋯⋯, m。

②从键盘输入整数 s(1<=s<=m)和 n,从环表的第 s 个结点开始计数为 1,当计数到第 n 个结点时,输出该第 n 结点对应的编号,将该结点从环表中消除,从输出结点的下一个结点开始重新计数到 n,这样,不断进行计数,不断进行输出,直到输出了这个环表的全部结点为止。

例如, m=10, s=3,n=4。则输出序列为: 6,10,4,9,5,2, 1, 3, 8, 7。

2.源代码 :

#include

#include

typedef struct list

{ int num; struct

list * next;

}list,* plist;

plist h,p,q;

void Create(int n)

{

h=(plist)malloc(sizeof(list));

h->next=NULL; h->num=0;

while(--n)

{

p=(plist)malloc(sizeof(list));

p->num=n;

p->next=h->next;

h->next=p;

}

while (p->next)

p=p->next;

p->next=h->next; }

void Find(int m,int s)

{

p=h;

while(p->num!=s)

p=p->next;

}

void OutNum(int n)

{

while(p->next!=p)

{

for(int i=1;i

p=p->next;

q=p->next;

printf("%-4d",p->next->num);

p->next=q->next;

p=p->next;

free(q); }

printf("%-4d\n",p->num);}

int main()

{

int m,s,n;

scanf("%d%d%d",&m,&s,&n);

Create(m+1);

Find(m,s);

OutNum(n);

}

3.运行结果截屏 :

4.编写与调试过程中遇到的问题:

在编写的过程中,首先遇到的困难是如何把算法转化为一个 c 语言程序 ,对于链表的操作,自己已经搞忘的差不多了,编写的时候对于如何实现一个环形链表,

自己刚开始时有些不知所措,后来在同学的指导下,有了思路。还有就是对于把算法转化为程序的步骤,自己还要加强。还有就是自己编写程序时,粗心大意,总是忘记加一些符号。比如第一次调试的时候,出现了这样的错误。

后来才发现,少加了一个大括号,以后这种情况要少出现。

1.实验题目:

归并顺序表(选作)。

请按以下要求编程实现:

①从键盘输入两个升序排列的整数序列 linka 和 linkb ,每个序列以输入 0 为结

束标记。

②将链表 linka 和 linkb 归并为 linkc , linkc 仍然为升序排列。归并完成后,

linka 和 linkb 为空表。输出 linkc 。

③对 linkc 进行处理,保持升序不变,删除其中重复的整数,对重复的整数

只保留一个,输出删除重复整数后的链表。

例如: linka 输入为: 10 20 3040500

归并后的 linkc 为:10 15 2020253030354040 455050

删除重复后的 linkc 为: 101520253035404550

2.源代码:

#include

#include

typedef struct LNode

{

int data;

struct LNode *next;

}LNode,*LinkList;

void Creat(LinkList &L);

void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc); void Delete(LinkList &L);

void Output(LinkList &L);

int main()

{

LinkList La,Lb,Lc;

Creat(La);

Creat(Lb);

MergeList(La,Lb,Lc);

free(La);

free(Lb);

Delete(Lc);

Output(Lc);

}

void Creat(LinkList &L)

{

LinkList p,q;

int num;

L=(LinkList)malloc(sizeof(LNode));

L->next=NULL;

p=L;

scanf("%d",&num);

while(num!=0)

{

q=(LinkList)malloc(sizeof(LNode));

q->data=num;

q->next=p->next;

p->next=q;

p=q;

scanf("%d",&num);

}

}

void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc) {

LinkList pa,pb,pc,p,q;

pa=La->next;

pb=Lb->next;

Lc=(LinkList)malloc(sizeof(LNode));

Lc->next=NULL;

pc=Lc;

相关文档
最新文档