实验二 顺序表与链表(4)

2020-04-16 13:41

《数据结构与算法》实验指导V2017

(5)创建链表:

(6)销毁和退出链表:

常熟理工学院计算机科学与工程学院

16

《数据结构与算法》实验指导V2017

3循环链表的应用(约瑟夫回环问题、)

用整数序列1,2,3,…,n表示顺序坐在圆桌周围的人,并采用循环链表作为存储结构。任意位置k开始计数,计到m让此位置的人出局,重复上述过程,直至只剩下最后一个人。依次输出每个出局的人的序号。

提示:用一个无头结点的循环单链表来实现n个元素的存储。exp2_3.c部分代码如下: #include #include #define ERROR 0 #define OK 1

typedef int ElemType; /*定义表元素的类型*/ typedef struct LNode /*线性表的单链表存储*/ {

ElemType data;

struct LNode *next; } LNode,*LinkList;

/*(1)---创建具有n个结点的无头结点的单向循环链表,返回其头指针*/ LinkList CreateList(int n) {

LinkList L;

L=(LinkList )malloc(sizeof(LinkList)); LNode *q,*p;

printf(\输入元素:\\n\ scanf(\

常熟理工学院计算机科学与工程学院

17

《数据结构与算法》实验指导V2017 q=L; int a;

for(a=0;a

p=(LNode *)malloc(sizeof(LNode)); scanf(\ q->next=p; q=p; }

q->next=L; return L; }/*CreateList*/

/*(2)---输出无头结点循环单链表的所有元素*/ void PrintList(LinkList L) {

printf(\输出表中的元素:\ LNode *p;

printf(\ p=L->next; while(p!=L){

printf(\ p=p->next; }

}/*PrintList*/

/*(3)---约瑟夫问题计算,依次输出出局的元素的序号*/ void JOSEPHUS(int n,int k,int m,LinkList L) {

L=CreateList(n); PrintList(L); int a,length=n; LNode *q;

for(a=1;anext; while(length!=1){ for(a=0;anext; q=L->next;

L->next=q->next;

printf(\被删除的数字:%d\\n\ free(q); length-=1; }

常熟理工学院计算机科学与工程学院

18

《数据结构与算法》实验指导V2017 printf(\输出最终的一个数字:%d\}/*JOSEPHUS*/ int main() {

int n,m,k;

LinkList L=NULL; /*定义指向单链表的指针*/ printf(\输入元素的个数\ printf(\输入位置\ printf(\输入人数\

while(scanf(\个元素从k位置开始每m个报数*/ JOSEPHUS(n,k,m,L); return 0; }

.输入10 2 3,表示一共有10个数,从第2个数之后开始数,数到3的人出局 实验结果:

常熟理工学院计算机科学与工程学院

19

《数据结构与算法》实验指导V2017 4、选做实验:设有头单链表,设计算法将表中值相同的元素仅保留一个结点。

提示:指针p从链表的第一个元素开始,利用指针q从指针p位置开始向后搜索整个链表,删除与之值相同的元素;指针p继续指向下一个元素,开始下一轮的删除,直至p==null为至,既完成了对整个链表元素的删除相同值。 #include #include #define ERROR 0 #define OK 1

typedef int ElemType; typedef struct LNode {

ElemType data;

struct LNode *next; }LNode,*LinkList; LinkList L=NULL;

LNode *InitList(LinkList L); void PrintList(LinkList L);

void DestroyLinkList(LinkList L); LinkList CreateList(int n); /*带头结点单链表初始化*/ LNode *InitList(LinkList L) {

L=(LNode *)malloc(sizeof(LNode)); if (!L) return ERROR; L->next=NULL; return L; }

/*输出带头结点单链表的所有元素 */

void PrintList(LinkList L) {

LinkList p; p=L->next; int i=1; while(p) {

printf(\ p=p->next; }

printf(\}/*PrintList*/

常熟理工学院计算机科学与工程学院

20


实验二 顺序表与链表(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:宣传册、图书、杂志尺寸

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: