單向鍊錶移位

2021-06-27 16:31:46 字數 1662 閱讀 1560

結構

第9題【描述】

輸入若干個正整數,輸入-1時輸入結束,用單向鍊錶組織輸入的正整數。定義和呼叫函式:struct node *createlist(void),建立單向鍊錶,返回指向煉表頭結點的指標。定義和呼叫函式:void printlist(struct node *head),輸出單向鍊錶。定義和呼叫函式:int sum(struct node *head),計算並返回所有結點中整數的和。定義和呼叫函式:struct node *cyclicshift(struct node *head, dir dir),實現鍊錶的迴圈移位,dir為列舉型別,取值left和right,當dir的值為left時,迴圈左移一次,當dir的值為right時,迴圈右移一次,返回指向迴圈移位後的煉表頭結點的指標。 

【輸入】

輸入若干個整數,以-1結尾,整數之間以空格間隔。

【輸出】

第一行輸出整數的和。

第二行輸出迴圈左移一次的結果,整數之間以空格間隔。最後乙個整數後面沒有空格。

第三行輸出迴圈右移一次的結果,整數之間以空格間隔。最後乙個整數後面沒有空格。

【輸入示例】

1 3 5 2 -1

【輸出示例】

113 5 2 1

1 3 5 2

【提示】

單向鍊錶中結點結構的型別宣告如下:

struct node ;

定義列舉型別dir如下:

enum dir ;

實現鍊錶的迴圈移位,迴圈左移時,將鍊錶的第乙個結點刪除,並將其插入到鍊錶尾部;迴圈右移時,將鍊錶的最後乙個結點刪除,並將其插入到鍊錶頭部。

【**】

《程式設計基礎——以c為例》第7章上機實驗題4。

# include # include //這道題目學到的東西有點多。。。 

struct node

;enum dir; //這個列舉要定義在最前面,因為後面的函式需要用到它,不能定義在main中

struct node * createlist(void)

return head;

} //建立鍊錶

void printlist(struct node *head)

printf("\n");

} //輸出鍊錶

struct node *cyclicshift(struct node *head,enum dir dir) //找出最後乙個鍊錶,並儲存在p中

n->next=null; //小心頭指標尾部並不是null,先讓它變成null,即變成尾指標

p->next=n; //在原先的最後乙個鍊錶p後面插入乙個新鍊錶n,即原來的頭鍊錶

} else if (dir == right) //找出倒數第二個指標

n=p->next; //用n儲存最後個指標

p->next=null; //讓倒數第二變成倒數第一

n->next=head;

head=n; //追加最後乙個指標n到最前面,並且變成head。

} return head;

} //迴圈移位

int sum(struct node *head)

return s;

} // 求和

int main()

鍊錶 反轉單向鍊錶

思路 從第二個元素開始。1 刪除當前元素。2 把當前元素放到頭結點位置。其中需要宣告3個變數 headnode 頭結點 prenode 前乙個結點 currentnode 當前結點 具體步驟如圖所示 實現 反轉單鏈表方法實現類 created by liujinjin on 17 1 19.publ...

鍊錶1 單向鍊錶

鍊錶中最簡單的一種是單向鍊錶,它包含兩個域,乙個資料域和乙個指標域,指標域指向鍊錶中的下乙個節點,最後乙個節點的指標域指向乙個空值 鍊錶最基本的結構是在每個節點儲存資料和到下乙個節點的位址,在最後乙個節點儲存乙個特殊的結束標記,另外在乙個固定的位置儲存指向第乙個節點的指標,有的時候也會同時儲存指向最...

鍊錶 單向鍊錶

討論單鏈表之前,我們先來討論下面這個問題。順序表存在的一些問題 中間 頭部的插入刪除,時間複雜度為o n 增容需要申請新空間,拷貝資料,釋放舊空間。會有不小的消耗。增容一般是呈2倍的增長,勢必會有一定的空間浪費。例如當前容量為100,滿了以後增容到200,我們再繼續插入了5個資料,後面沒有資料插入了...