本題要求實現乙個函式,將給定單向鍊錶逆置,即表頭置為表尾,表尾置為表頭。鍊錶結點定義如下:
structlistnode ;
struct listnode *reverse( struct listnode *head );其中
head
是使用者傳入的鍊錶的頭指標;函式reverse
將鍊錶head
逆置,並返回結果鍊錶的頭指標。
#include #includestruct
listnode ;
struct listnode *createlist(); /*
裁判實現,細節不表
*/struct listnode *reverse( struct listnode *head );
void printlist( struct listnode *head )
printf("\n
");}int
main()
/*你的**將被嵌在這裡
*/
1 2 3 4 5 6 -1
6 5 4 3 2 1
在只有尾指標的情況下完成倒序。有點燒腦,理清之後很簡單
配合如下**食用:
這只是前兩次逆置的實現,後續同理。
struct listnode *reverse( struct listnode *head )return
s1;};
在棧的順序儲存實現中,另有一種方法是將top定義為棧頂的上乙個位置。請編寫程式實現這種定義下堆疊的入棧、出棧操作。如何判斷堆疊為空或者滿?
bool其中push( stack s, elementtype x );
elementtype pop( stack s );
stack
結構定義如下:
typedef int注意:如果堆疊已滿,position;
typedef
struct snode *ptrtosnode;
struct
snode ;
typedef ptrtosnode stack;
push
函式必須輸出「stack full」並且返回false;如果佇列是空的,則pop
函式必須輸出「stack empty」,並且返回error。
#include #include#define error -1typedef
intelementtype;
typedef
enum
operation;
typedef
enum bool
;typedef
intposition;
typedef
struct snode *ptrtosnode;
struct
snode ;
typedef ptrtosnode stack;
stack createstack(
intmaxsize )
bool
push( stack s, elementtype x );
elementtype pop( stack s );
operation getop();
/*裁判實現,細節不表
*/void printstack( stack s ); /*
裁判實現,細節不表
*/int
main()
}return0;
}/*你的**將被嵌在這裡
*/
4
poppush 5
push 4
push 3
poppop
push 2
push 1
push 0
push 10
end
stack empty
3 is out
4 is out
stack full
0 1 2 5
注意data是個陣列!!!
boolpush( stack s, elementtype x )
else
}elementtype pop( stack s )
else
return s->data[--(s->top)];
}
資料結構 鍊錶的逆置
將乙個鍊錶進行逆置 如 10 20 30 40 逆置後40 30 20 10 分析 方法一 新建鍊錶 遍歷舊鍊錶,將舊鍊錶的結點依此頭插到新鍊錶中。上 include include typedef struct node node 建立結點 node buynode int data 用建立新鍊錶...
資料結構與演算法 鍊錶逆置
這兩天溫度直降,看書的時候手總是不自覺的抖,索性自學完了鍊錶一章 今天重寫了鍊錶逆置的題 發現鍊錶題只要畫圖,弄清邏輯關係,還是很簡單的 希望能持之以恆 include includetypedef struct nodenode typedef struct node linklist linkl...
資料結構69 鍊錶逆置,鍊錶反轉,鍊錶翻轉
鍊錶翻轉,簡單地理解,就是將鍊錶的頭部結點變為鍊錶的尾部結點,與此同時將原鍊錶的尾部結點變成頭部結點。如下圖所示 圖 1 鍊錶翻轉示意圖 將鍊錶進行翻轉的方法有多種,本節給大家介紹兩種實現方法。實現鍊錶翻轉最直接的方法就是 從鍊錶的頭部開始遍歷每個結點,改變每個結點的指向,即將原本指向下乙個結點的指...