線性表逆置實驗報告

課程設計題目:線性表逆置實驗

一、問題描述

試分別以順序表和單鏈表作存儲結構,各寫一實現(xiàn)線性表就地逆置的算法迟杂。

二、基本要求

  1. 逆置線性表本慕。
  2. 就地(空間復雜度至多O(1))排拷。

三、概要設計

1. 數(shù)據(jù)結構的設計

依題目要求间狂,本實驗采用順序表和單鏈表攻泼。

2. 算法的設計

對于順序表的逆置火架,我們使用兩個指針ij鉴象,分別從左到右和從右到左掃描忙菠,交換元素,直到相遇纺弊。

偽代碼如下

void reverse() {
    for (int i = 0, j = length - 1, t; i < j; i++, j--)
        t = data[i], data[i] = data[j], data[j] = t;
}
時間復雜度 空間復雜度
O(n) O(1)

對于單鏈表的逆置牛欢,我們使用按鏈表順序對 Node 使用頭插法。

偽代碼如下

void reverse() {
    Node *p = first.next;
    first.next = NULL;
    for (; p;) {
        Node *s = p;
        p = s->next;
        s->next = first.next;
        first.next = s;
    }
}
時間復雜度 空間復雜度
O(n) O(1)

四淆游、詳細設計

1. 設計抽象數(shù)據(jù)類型對應的C++類定義

即常規(guī)的順序表和單鏈表傍睹,在此便不一一贅述了。

2. 設計每個成員函數(shù)

除上述void reverse()函數(shù)外犹菱,其余函數(shù)與常規(guī)的順序表和單鏈表中的無異拾稳,在此便不一一贅述了。

3. 設計主函數(shù)

主函數(shù)主要包括設計測試數(shù)據(jù)并測試腊脱,輸出逆置前和逆置后的結果访得。

五、運行與測試

1. 測試環(huán)境

運行環(huán)境:Windows 20H2, i7-9750H @ 2.60GHz, 16GB RAM

編譯器:gcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)

編譯命令:-g

運行終端:cmd

2. 在調試程序的過程中遇到的問題與解決方案

暫未發(fā)現(xiàn)異常陕凹。

3. 程序清單及運行結果

程序清單如下

順序表

#include <iostream>
using namespace std;

const int MaxSize = 10; //10只是示例性的數(shù)據(jù)悍抑,可以根據(jù)實際問題具體定義
struct SeqList
{
    SeqList() { length = 0; }
    SeqList(int a[], int n)
    {
        if (n > MaxSize)
            throw "參數(shù)非法";
        for (int i = 0; i < n; i++)
            data[i] = a[i];
        length = n;
    }
    ~SeqList() {}

    void print()
    {
        for (int i = 0; i < length; i++)
            cout << data[i] << " ";
        cout << endl;
    }

    void reverse()
    {
        for (int i = 0, j = length - 1, t; i < j; i++, j--)
            t = data[i], data[i] = data[j], data[j] = t;
    }

    int data[MaxSize];
    int length;
};

int main()
{
    int a[] = {0, 1, 2, 3, 4, 5};
    SeqList l(a, 6);
    l.print();
    l.reverse();
    l.print();
    return 0;
}

運行結果(符合預期)

D:\OneDrive - mail2.sysu.edu.cn\MyDocuments\code\DSA\week04\線性表逆置>SeqList.exe
0 1 2 3 4 5
5 4 3 2 1 0

單鏈表

#include <iostream>
using namespace std;

struct Node
{
    int data;
    Node *next;
};

struct LinkList
{
    Node first = {-1, NULL};
    LinkList() {}
    LinkList(int a)
    {
        Node *s = new Node;
        *s = {a, NULL};
        first.next = s;
    }
    LinkList(int a[], int n)
    {
        Node *p = &first;
        for (int i = 0; i < n; i++)
        {
            Node *s = new Node;
            *s = {a[i], NULL};
            p->next = s;
            p = s;
        }
    }
    ~LinkList()
    {
        for (Node *p = first.next; p;)
        {
            Node *s = p;
            p = s->next;
            delete s;
        }
    }

    void print()
    {
        for (Node *p = first.next; p; p = p->next)
            cout << p->data << " ";
        cout << "\n";
    }

    void reverse()
    {
        Node *p = first.next;
        first.next = NULL;
        for (; p;)
        {
            Node *s = p;
            p = s->next;
            s->next = first.next;
            first.next = s;
        }
    }
};

int main()
{
    int a[] = {0, 1, 2, 3, 4, 5};
    LinkList l(a, 6);
    l.print();
    l.reverse();
    l.print();
    return 0;
}

運行結果(符合預期)

D:\OneDrive - mail2.sysu.edu.cn\MyDocuments\code\DSA\week04\線性表逆置>LinkList.exe
0 1 2 3 4 5
5 4 3 2 1 0

六、總結與心得

  1. 單鏈表的就地逆置算法杜耙,除了利用頭插法外搜骡,還可以翻轉指針,詳見《數(shù)據(jù)機構(C++版)學習輔導與實驗指導》P23的算法2-4佑女。

七记靡、參考資料

  1. 王紅梅, 胡明, 王濤. 數(shù)據(jù)結構(C++版)[M]. 2 版. 清華大學出版社, 2011.
  2. 王紅梅, 胡明, 王濤. 數(shù)據(jù)機構(C++版)學習輔導與實驗指導[M]. 2 版. 清華大學出版社, 2011.
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市团驱,隨后出現(xiàn)的幾起案子簸呈,更是在濱河造成了極大的恐慌,老刑警劉巖店茶,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜕便,死亡現(xiàn)場離奇詭異,居然都是意外死亡贩幻,警方通過查閱死者的電腦和手機轿腺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丛楚,“玉大人族壳,你說我怎么就攤上這事∪ば” “怎么了仿荆?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我拢操,道長锦亦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任令境,我火速辦了婚禮杠园,結果婚禮上,老公的妹妹穿的比我還像新娘舔庶。我一直安慰自己抛蚁,他們只是感情好,可當我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布惕橙。 她就那樣靜靜地躺著瞧甩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪弥鹦。 梳的紋絲不亂的頭發(fā)上亲配,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天,我揣著相機與錄音惶凝,去河邊找鬼吼虎。 笑死,一個胖子當著我的面吹牛苍鲜,可吹牛的內容都是我干的思灰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼混滔,長吁一口氣:“原來是場噩夢啊……” “哼洒疚!你這毒婦竟也來了?” 一聲冷哼從身側響起坯屿,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤油湖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后领跛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體乏德,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年吠昭,在試婚紗的時候發(fā)現(xiàn)自己被綠了喊括。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡矢棚,死狀恐怖郑什,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情蒲肋,我是刑警寧澤蘑拯,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布钝满,位于F島的核電站,受9級特大地震影響申窘,放射性物質發(fā)生泄漏弯蚜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一偶洋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧距糖,春花似錦玄窝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至趣斤,卻和暖如春俩块,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背浓领。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工玉凯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人联贩。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓漫仆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親泪幌。 傳聞我的和親對象是個殘疾皇子盲厌,可洞房花燭夜當晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內容