結構
第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個資料,後面沒有資料插入了...