数据结构实验二:循环链表
2015-09-18 11:20
197 查看
用循环链表求解约瑟夫环问题。
/*************************************************** Copyright (c) 2015 Jingshuang Hu @filename:demo.c @datetime:2015.09.18 @author:HJS @e-mail:eleftheria@163.com @blog:http://blog.csdn.net/hujingshuang ****************************************************/ #include <stdio.h> #include <stdlib.h> /***************************************************/ typedef struct node { int data; struct node *next; }Lnode, *LinkList; /***************************************************/ LinkList List_Init(void); void List_Joseph(LinkList h, int n, int m, int k); int List_Show_Length(LinkList h); void List_Show_All(LinkList h); /***************************************************/ int main() { LinkList p; int pos = 0, value = 0; p = List_Init(); List_Show_Length(p); List_Show_All(p); List_Joseph(p, List_Show_Length(p), 5, 3); return 0; } /***************************************************/ LinkList List_Init(void) { int i = 0, num = 0, value = 0; LinkList h = NULL; LinkList p, q; printf("循环链表个数:"); scanf("%d", &num); for(i = 0; i < num; i++) { scanf("%d", &value); p = (LinkList)malloc(sizeof(Lnode)); p->data = value; p->next = NULL; if (h == NULL) { h = p; } else { q->next = p; } q = p; } p->next = h; return h; } /***************************************************/ //元素:n 位置:m 间隔:k void List_Joseph(LinkList h, int n, int m, int k) { LinkList p = h, q; int i = 0, len = 0; for (i = 1; i < m; i++) { q = p; p = p->next; } while(len < n) { for (i = 0; i < k; i++) { q = p; p = p->next; } printf("%d ", p->data); q->next = p->next; free(p); p = q->next; len++; } } /***************************************************/ int List_Show_Length(LinkList h) { LinkList p = h; int length = 0; if (p->next == h) { printf("表空!\n"); } else { do { length++; p = p->next; }while(p != h); printf("表长:%d\n", length); } return length; } /***************************************************/ void List_Show_All(LinkList h) { LinkList p = h; if (p->next == h) { printf("表空!\n"); } else { printf("元素:"); do { printf("%d ", p->data); p = p->next; }while(p != h); printf("\n"); } }
相关文章推荐
- 数据结构实验二:单链表
- 【数据结构】线性表的链式存储结构--单链表
- 数据结构分类
- 项目4--顺序表应用 问题二
- 第三周 线性表(-)--顺序表 项目四--顺序表的应用 问题一
- 第3周SHH数据结构—【项目1-顺序表的基本运算】
- 第三周 项目3-单链表应用
- 二叉树的性质
- 顺序循环队列的基本操作
- 【项目5 线性表-- 顺序表存储应用】分离元素<之二>
- 【项目5 线性表-- 顺序表存储应用】分离元素<之一>
- 数据结构与算法学习1——算法复杂度分析
- 【数据结构之旅】顺序栈入门操作
- 【数据结构之旅】顺序栈入门操作
- 关于数据结构的学习经验分享 (链表相关的内容)
- 「数据结构」红黑树
- 关于数据结构的学习经验分享 (字符串相关的)
- 数据结构学习3--栈的实现(c++)
- 浅谈数据结构-归并排序
- 研磨数据结构与算法-02各种排序算法