線性表(二) 單鏈表(4) 單鏈表的逆置

2021-07-07 03:42:51 字數 2670 閱讀 6697

/*

*all right resvered .

*檔名稱: 單鏈表的逆置.cpp

*作 者: 鄭兆涵

*線性表(二)——單鏈表 (4)

*/

問題:設計乙個演算法,將乙個帶頭結點的資料域依次為a1,a2,…,an(n≥3)的單鏈表的所有結點逆置,即第乙個結點的資料域變為an,…,最後乙個結點的資料域為a1。實現這個演算法,並完成測試。

程式設計**:

//標頭檔案:linklist.h,包含定義順序表資料結構的**、巨集定義、要實現演算法的函式的宣告

#ifndef linklist_h_included

#define linklist_h_included

typedef int elemtype;

typedef struct lnode //定義單鏈表結點型別

linklist;

void createlistf(linklist *&l,elemtype a,int n);//頭插法建立單鏈表

void createlistr(linklist *&l,elemtype a,int n);//尾插法建立單鏈表

void initlist(linklist *&l); //初始化線性表

void destroylist(linklist *&l); //銷毀線性表

bool listempty(linklist *l); //判斷線性表是否為空

int listlength(linklist *l); //求線性表長度

void displist(linklist *l); //輸出線性表

bool getelem(linklist *l,int i,elemtype &e); //求線性表某個資料元素值

int locateelem(linklist *l,elemtype e); //按元素值查詢

bool listinsert(linklist *&l,int i,elemtype e); //插入資料元素

bool listdelete(linklist *&l,int i,elemtype &e); //刪除資料元素

#endif // linklist_h_included

//原始檔:linklist.cpp,包含實現各種演算法的函式的定義

#include #include #include "linklist.h"

void createlistf(linklist *&l,elemtype a,int n)//頭插法建立單鏈表

}void createlistr(linklist *&l,elemtype a,int n)//尾插法建立單鏈表

r->next=null; //終端結點next域置為null

}void initlist(linklist *&l)

void destroylist(linklist *&l)

free(p); //此時q為null,p指向尾結點,釋放它

}bool listempty(linklist *l)

int listlength(linklist *l)

return(i);

}void displist(linklist *l)

printf("\n");

}bool getelem(linklist *l,int i,elemtype &e)

if (p==null) //不存在第i個資料結點

return false;

else //存在第i個資料結點

}int locateelem(linklist *l,elemtype e)

if (p==null)

return(0);

else

return(n);

}bool listinsert(linklist *&l,int i,elemtype e)

if (p==null) //未找到位序為i-1的結點

return false;

else //找到位序為i-1的結點*p

}bool listdelete(linklist *&l,int i,elemtype &e)

if (p==null) //未找到位序為i-1的結點

return false;

else //找到位序為i-1的結點*p

}//編寫主函式,進行單鏈表的逆置

#include #include #include "linklist.h"

void reverse(linklist *&l)

}int main()

; createlistr(l,a,8);

printf("l:");

displist(l);

reverse(l);

printf("逆置後l: ");

displist(l);

destroylist(l);

return 0;

}

輸出結果:

線性表逆置(順序表和單鏈表)

這幾天練習了下線性表的逆置,順序表比較簡單,就是陣列的位置交換。順序表的逆置 單鏈表的逆置 頭插法就地逆置 遞迴順序表的逆置 中間變數temp,交換首位兩個元素的位置。void listreverse sqlist l sqlist status listinit sqlist l status l...

線性表(二) 單鏈表(4) 單鏈表的遞增判斷

all right resvered 檔名稱 單鏈表的遞增判斷.cpp 作 者 鄭兆涵 線性表 二 單鏈表 4 問題 設計乙個演算法,判斷單鏈表l是否是遞增的。實現這個演算法,並完成測試。程式設計 標頭檔案 linklist.h,包含定義順序表資料結構的 巨集定義 要實現演算法的函式的宣告 ifnd...

單鏈表逆置

單鏈表逆置 include include define item num 10 typedef struct tagnode node node linklist create void linklist destroy node head void linklist print node hea...