264反轉連結串列
題目二 反轉連結串列
上機報告
題目:編寫一個反轉連結串列元素的程式
一、需求分析
1.本演示程式中,連結串列中所有元素均為整型數,輸入的第一行是表示連結串列個數的整數n,後面有n行資料表示n個連結串列,其中每行的第一個數表示連結串列所含數的個數。輸出同樣為n行,每一行輸出每個連結串列反轉後的形式。
2.演示程式在編譯器或是cmd環境下正常編譯執行即可,按照要求輸入n,和n行資料。
3.程式執行的命令包括:
1)n,和n行資料的輸入 2)反轉每個連結串列 3)輸出每個反轉後的連結串列 4)return 0 結束。
4.測試資料
(1)
輸入:
3
5 1 2 3 4 5
3 2 4 5
1 3
輸出:
5 4 3 2 1
5 4 2
3
二、概要設計
為實現上述程式功能,用單連結串列表示每個連結串列
單連結串列的抽象資料型別定義為:
ADT List{
資料物件:D={a1|a1屬於ElemSet,i=1,2...,n,n>=0}
資料關係:R1={<a(i-1),a(i)>|a(i-1),a(i)屬於D,i=2...,n}
基本操作:
InitList(&L)
DestroyList(&L)
ClearList(&L)
ListEmpty(&L)
ListLength(&L)
GetElem(&L)
LocateElem(&L)
PriorElem(&L)
NextElem(&L)
ListInsert(&L)
ListDelete(&L)
ListTraverse(L,visit())
}ADT List
2.本程式包含兩個模組:
1)主程式模組:
int main()
{
初始化;
while()
{
接收命令;
處理命令;
}
for()
{
接受命令;
處理命令;
}
}
2)結點結構模組:定義單連結串列的結點結構
各模組呼叫關係如下:
【主程式模組】–>【結點結構模組】
三、詳細設計
1.有序連結串列設計結點:
typedef struct node{
int data;
struct node *next;
} LNode;
2.主函式設計:
int main()
{
int n,m,i,num;
LNode *list;
scanf("%d",&n);
list = (LNode*)malloc(sizeof(LNode));
list->next = NULL;
while(n>0)
{
scanf("%d",&m);
int len = m;
for(;m>0;m--)
{
scanf("%d",&num);
LNode* node = (LNode*)malloc(sizeof(LNode));
node->data=num;
node->next=list->next;
list->next=node;
}
LNode* p = list;
for(i=0;i<len;i++)
{
p = p->next;
printf("%d ",p->data);
}
printf("\n");
list->next = NULL;
n--;
}
return 0;
}
四、除錯分析
1.一開始在設計演算法完成後沒有使輸入的資料讀取到連結串列中,在修改了輸入部分的程式碼後成功完成了任務。
2、本題演算法比較容易,通過預設的結點定義來將輸入的數插入連結串列,然後使用for迴圈語句輸出即可,整體演算法難度不大,但是要注意不同題目輸入輸出的要求也會不同,時刻注意審題防止浪費大量的時間用於Debug。
3.演算法的時空分析:
1)首先是在while迴圈下巢狀的for迴圈語句,用於完成連結串列的建立和資料的插入,時間複雜度為O(n*m)。
2)其次是完成反轉連結串列輸出的for迴圈,時間複雜度為O(n)。
4.本次作業是使用連結串列完成的,通過練習,能夠有效提升我對連結串列這個資料結構的認識和掌握。通過抽象資料結構的分析,將程式碼分為兩個模組,思路清晰的解決了問題,得到了良好的演算法訓練。
五、使用者手冊
1.本題在cmd或者編譯環境中執行,按照要求輸入,按Enter得到輸出結果。
六、測試資料
七、附錄
源程式檔名清單:
264反轉連結串列,cpp
相關文章
- 反轉連結串列
- #反轉連結串列_C++版 #反轉連結串列_Java版 @FDDLCC++Java
- 1025 反轉連結串列
- leetcode 反轉連結串列LeetCode
- leetcode 92 反轉連結串列ⅡLeetCode
- 連結串列反轉問題
- 206. 反轉連結串列
- 【LeetCode-連結串列】面試題-反轉連結串列LeetCode面試題
- 資料結構之連結串列:206. 反轉連結串列資料結構
- 反轉連結串列、合併連結串列、樹的子結構
- [leetcode 92] 反轉連結串列 IILeetCode
- 反轉連結串列系列問題
- leetcode206. 反轉連結串列LeetCode
- leetcode 206. 反轉連結串列LeetCode
- java實現連結串列反轉Java
- leetcode 206.反轉連結串列LeetCode
- JZ-015-反轉連結串列
- TypeScript 實現連結串列反轉TypeScript
- 反轉一個單連結串列。
- **203.移除連結串列元素****707.設計連結串列****206.反轉連結串列**
- LeetCode-092-反轉連結串列 IILeetCode
- LeetCode-Python-(206)反轉連結串列LeetCodePython
- 反轉相鄰連結串列單元
- leetCode206 反轉連結串列ILeetCode
- 反轉連結串列(遞迴與棧)遞迴
- 反轉連結串列(C++簡單區)C++
- 面試必備的「反轉連結串列」面試
- 劍指 Offer 24.反轉連結串列
- 劍指 Offer 24. 反轉連結串列
- 如何在Java中反轉單連結串列?Java
- 每日演算法隨筆:反轉連結串列演算法
- 反轉連結串列系列題練習遞迴遞迴
- [每日一題] 第二題:反轉連結串列每日一題
- Java單連結串列反轉圖文詳解Java
- LeetCode每日一題:反轉連結串列(No.206)LeetCode每日一題
- 程式碼隨想錄第3天 | 連結串列 203.移除連結串列元素,707.設計連結串列,206.反轉連結串列
- [連結串列】2.輸入一個連結串列,反轉連結串列後,輸出新連結串列的表頭。[多益,位元組考過]
- 定義一個函式,輸入一個連結串列的頭節點,反轉該連結串列並輸出反轉後連結串列的頭節點函式