264反轉連結串列

wtwtwt4396發表於2020-10-05

題目二 反轉連結串列

                                       上機報告
                             題目:編寫一個反轉連結串列元素的程式

一、需求分析

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

相關文章