雙向迴圈鍊錶 字母表實現前後移動

2021-08-14 19:46:23 字數 1945 閱讀 3789

要求實現使用者輸入乙個數使得26個字母的排列發生變化,例如使用者輸入3,使得結果為:defhijklmnopqrstuvwxyzabc,

同時需要支援負數,使得輸入-3時,結果為:xyzabcdefghijklmnopqrstuvw。實現位置的前後都能移動且資料都是連著的,當然資料結構選擇雙向迴圈鍊錶啦。

問題實際上是有關凱撒密碼,凱撒密碼的思想是通過把字母移動一定的位數來實現加密和解密。

明文中的所有字母都在字母表上向後(或向前)按照乙個固定數目進行偏移後被替換成密文。

#define _crt_secure_no_warnings

#include #define ok 1

#define error 0

typedef int status;

typedef char eletype;

//雙向迴圈鍊錶 結點資料結構

typedef struct dulnode

dulnode,*dullinklist;

//取了別名 dulnode* 相當於dullinklist

//建立雙向迴圈鍊錶

status creatdullink(dullinklist* list)

dulnode* head = (dulnode*)malloc(sizeof(dulnode));//建立頭結點

if (head == null)

dulnode* p = head;//p 移動指標,起初指向頭結點

p->next = p->prior = null;

for (size_t i = 0; i < 26; i++)

//下2步 將尾結點和第乙個結點關聯形成雙向迴圈鍊錶,越過頭結點。

p->next = head->next;

head->next->prior = p;

//迴圈鍊錶指向第乙個元素

*list = p->next;

//釋放頭結點

free(head);

return ok;

}//將迴圈鍊錶指向第num個位置

status caesar(dullinklist* list,int num)

*list = tmp;

} //雙向迴圈鍊錶指標往前移

if (num < 0)

*list = tmp;

} return ok;

}//銷毀鍊錶釋放記憶體

status destroydullink(dullinklist list)

dulnode* node = list;//node為移動指標,node 開始指向迴圈鍊錶第乙個結點

//迴圈鍊錶遍歷完判斷,尾結點的指標域指向第乙個結點

while (node->next != list)

//釋放最後乙個結點

free(node);

return ok;

}//迴圈鍊錶展示

status showcaesar(dullinklist list)

dulnode* node = list;//node為移動指標,node 開始指向迴圈鍊錶的開始的乙個結點

//迴圈鍊錶遍歷完判斷,尾結點的next指標域指向開始第乙個結點

雙向迴圈鍊錶列印字母

要求實現使用者輸入乙個數使26個字母的排列發生變化,例如使用者輸入3,輸入結果 defghijklmnopqrstuvwxyzabc 同時需要支援負數,例如使用者輸入 3,輸出結果 xyzabcdefghijklmnopqrstuvw解題 利用雙向迴圈鍊錶,按順序生成字母。若輸入值為正,則順序遍歷鍊...

雙向迴圈鍊錶 java實現

雙向迴圈煉表示意圖 雙向迴圈鍊錶實現 public class doublelink private int size 鍊錶長度 public nodehead 頭節點 constructor public doublelink 獲取鍊錶的長度 return public int size 判斷鍊錶...

C 實現雙向迴圈鍊錶

雙向迴圈鍊錶 除錯正常,所有功能均測試 節點類 template class listnode listnode type d,listnode n nullptr,listnode p nullptr data d next n prev p void setdata type d 雙向迴圈鍊錶 ...