資料結構和演算法 旋轉列印鍊錶

2021-07-10 14:45:22 字數 1886 閱讀 7308

輸入引數

n n

為正整數,如輸入n=

5' role="presentation" style="position: relative;">n=5

n=5,則按行列印如下的數字:

這個問題是將數字1…

n21 …n

2按照一圈一圈的方式儲存好,再按照行的方式對其進行列印。

最簡單的方法是利用陣列:

這個方法比較簡單,就不給出**了。

有人覺得上述的問題沒什麼難度,現在對問題進行公升級。

使用鍊錶的方式,不得使用陣列。最終按行列印出來。(純煉表的操作)

由於本問題並不難,只是有些麻煩,利用這個問題,可以補習c語言中的指標的操作。方法有很多,在這裡我給出我自己的方法,不見得是最簡單的方法,若有簡單的方法大家可以試試,我的方法主要分為以下幾步:

下面是我的結果截圖:

以下是我實現的程式**,僅供參考:

#include

#include

typedef struct node node;

struct node;

node* setmatrix(int start, int n)else

//p_left_down-->p_left_up

//p_left_down-->p_right_down

node* p_2 = p_left_down;

node* p_3 = p_left_down;

for (i =

0; i < (n-

2); i++)

//p_right_up-->p_right_down

node* p_4 = p_right_up;

node* r = p_left_up;

for (i =

0; i < (n-

2); i++)

}return p_left_up;

}node* setall(int start, int n)else

r_2->nextrightnode = r->nextrightnode;

r->nextrightnode->nextleftnode = r_2;

r->nextrightnode = p_1;

p_1->nextleftnode = r;

p_down = p_down->nextdownnode;

p_1 = p_1->nextdownnode;

}n = n -

2; p_tmp = f;}}

return p;

}void printmatrix(node* p)

printf("\n");

q = q->nextdownnode;

}}int main(int argc, char** argv)

int n = atoi(argv[1]

); //node* p = setmatrix(25, n);

node* p = setall(1, n);

printmatrix(p);

return 0;

}

Python資料結構之旋轉鍊錶

題目描述 給定乙個鍊錶,旋轉鍊錶,使得每個節點向右移動k個位置,其中k是乙個非負數 樣例 給出鍊錶1 2 3 4 5 null和k 2 返回4 5 1 2 3 null 首先,觀察一下這個題目要達到的目的,其實,換一種說法,可以這樣來描述 給出乙個k值,將鍊錶從倒數第k個節點處起之後的部分移動到鍊錶...

資料結構和演算法 雙向鍊錶

初始化 指標域置為空 null 資料域可用可不用 前插法 插入節點插在頭節點之後 為前插法 插入節點的next 頭節點的next 插入節點的prev 頭節點 頭節點的next 插入節點 判斷是否存在下乙個節點 如果 頭節點的next null 說明存在,就需要把下乙個節點的prev指向插入節點 如果...

資料結構和演算法 8 鍊錶

8.1.陣列存在的問題在處理列表的時候陣列是常用的資料結構。陣列可以對所儲存的資料項提供快速地訪問訪問,而且它很易於進行迴圈遍歷操作。當然,陣列已經是語言的一部分了,使用者不需要使用額外的記憶體,也不需要花費因使用使用者自定義的資料結構所需的處理時間。然而正如所見,陣列不是一種最佳的資料結構。在無序...