日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构-循环单链表之魔术师发牌问题

發布時間:2023/12/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构-循环单链表之魔术师发牌问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題描寫敘述:

? ? ? ?魔術師手中有A、2、3……J、Q、K十三張黑桃撲克牌。在表演魔術前,魔術師已經將他們依照一定的順序疊放好(有花色的一面朝下)。魔術表演過程為:一開始,魔術師數1,然后把最上面的那張牌翻過來,是黑桃A;然后將其放到桌面上;第二次,魔術師數1、2;將第一張牌放到這些牌的最以下,將第二張牌翻轉過來,正好是黑桃2;第三次,魔術師數1、2、3;將第1、2張牌依次放到這些牌的最以下,將第三張牌翻過來正好是黑桃3;……直到將全部的牌都翻出來為止。問原來牌的順序是怎樣的。


接下來通過c語言簡單實現:

#include "stdafx.h" #include "stdlib.h"//聲明一個單鏈表結構體 typedef struct LNode {int data; //數據域,數據域的類型為泛型(ElementType)LNode *next; //指針域,指向下一個node的地址 }LNode, *LinkList; //聲明2個結構體別名(結構體別名和結構體指針別名),方便在外部直接通過別名定義該結構體類型的變量 /* 魔術師發牌問題:循環單鏈表 */ /* 初始化循環單鏈表n個節點數據為0 */ LinkList initList(int n) {if (n < 1) {return NULL;}LNode *s;LNode *p;p = NULL;LNode *r = NULL;int j = 1;while (j<=n){s = (LinkList)malloc(sizeof(LNode));s->data = 0;if (p == NULL) {p =r = s;}else{r->next = s;r = s;}j++;}r->next = p;return p; }/* 根據算法規則對相應位置進行數據填充 */ LinkList magic(int n) {LNode *L;LinkList p =initList(n);L = p;int j = 1;while (true){ //第一個節點數據為1if (j == 1) {p->data = j;j++;continue;}int k = j;//臨時存儲節點需要偏移的次數for (int i = 1; i <= k; i++){ p = p->next;if (p->data != 0) {//判斷該節點是否已有數據,如果有則需要跳過該節點即多向后移動一次k++;}}p->data = j;//賦值j++;if (j > n) {break;}}return L; }

主函數:

void main() {int n = 10;LinkList L = magic(n);int j = 1;while (L!=NULL){printf_s("%d\t", L->data);if (j < n) {L = L->next;}else{break;}j++;} }

輸出結果:


以上只是我個人設計的一種實現,如果發散思維肯定還有很多種寫法呢!

總結

以上是生活随笔為你收集整理的数据结构-循环单链表之魔术师发牌问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。