資料結構自學記錄 二 單鏈表

2021-08-31 13:43:21 字數 2799 閱讀 9599

**實現:

//

// created by ly on 18-11-9.

//#include using namespace std;

typedef struct node* ptrlnode;

struct node lnode;

//頭插法,建立單鏈表

void createlistf(ptrlnode &l,int a,int n)

}//尾插法,建立單鏈表

void createlistr(ptrlnode &l,int a,int n)

r->next = null;

}//初始化線性表

void initlist(ptrlnode &l)

//銷毀線性表destory(l)

void destroylist(ptrlnode &l)

free(pre);

}//判斷線性表是否為空表

bool isempty(ptrlnode l)

//求鍊錶的長度

int listlength(ptrlnode l)

}//求線性表中位置i的元素

bool getelem(ptrlnode l,int i,int &e)

if (p == null)

return false;

else

}//按元素值查詢,時間複雜度為o(n)

int locateelem(ptrlnode l,int key)

if(p == null)

return 0;

else

return i;

}//插入資料元素

bool listinsert(ptrlnode &l,int i,int key)

if(p == null)

else

}//刪除資料元素

bool listdelete(ptrlnode &l,int i,int key)

if(p == null)

return false;

else

key = q->data;

p->next = q->next;

free(q);

return true;

}}//for test

void printlist(ptrlnode l)

cout << endl;

cout << "end" << endl;

}//演算法設計 刪除單鏈表中值域最大的節點

void deletemaxnode(ptrlnode &l)

pre = p;

p = p->next;

}maxpre->next = maxp->next;

free(maxp);

}//演算法設計 單鏈表排序

void listsort(ptrlnode &l)

p->next = pre->next;

pre->next = p;

p = q; //掃瞄原單鏈表餘下的結點

}}//演算法設計 ,單鏈表的所有結點逆之

//方式1:頭插法建表

void reverse(ptrlnode &l)

}//解法2

void reverse2(ptrlnode l)

//演算法設計:將l,分割成l1,l2

void split(ptrlnode &l,ptrlnode &l1,ptrlnode &l2)

r1->next = null;

}//單鏈表實現:荷蘭國旗問題

void move2(ptrlnode &l)

//建立l1不帶頭結點的單鏈表

else if(p->data == 1)

}//建立l2不帶頭結點的單鏈表

else else

}p = p->next;

}//結尾工作

r->next = r1->next = r2->next = null;

r->next = l1;

r1->next = l2;

}int main(void)

; int len = sizeof(a) / sizeof(int);

cout << len << endl;

ptrlnode l;

//l = (ptrlnode)malloc(sizeof(lnode));

createlistf(l,a,len);

printlist(l);

ptrlnode l1;

createlistr(l1,a,len);

printlist(l1);

cout << endl;

//for test sort

int b = ;

int len2 = sizeof(b) / sizeof (int);

ptrlnode l2;

createlistf(l2,b,len2);

listsort(l2);

printlist(l2);

//for test reverse

reverse(l2);

printlist(l2);

int b1 = ;

ptrlnode bl;

createlistr(bl,b1,12);

cout << "bl.........." << endl;

printlist(bl);

move2(bl);

printlist(bl);

}

資料結構自學記錄 三 雙鏈表

實現 雙鏈表操作 雙鏈表的結構體 include typedef struct dnode ptrdlinklist typedef struct dnode dlinklist 頭插法建立雙鏈表 void createlistf ptrdlinklist l,int a,int n 尾插法建立雙鏈...

資料結構(二) 單鏈表

單鏈表是一種鏈式訪問的資料結構,用一組位址任意的儲存單元存放線性表中的資料元素。鏈式儲存不僅需要儲存元素本身,還要儲存乙個指向其後繼元素的位址,這種儲存結構也被稱為 node,儲存資料的叫資料域,儲存位址的叫指標域。鏈式儲存結構需要存放資料的資料域和存放後繼節點位址的指標域,所以在定義單鏈表時需要如...

資料結構之單鏈表(二)

判斷單鏈表是否有環 思路 設定兩個 指標 乙個走一步,乙個走兩步,若存在環,則一定會存在有相交的位置點 public boolean isloop linklist lnode return false 輸出單鏈表中倒數第k個結點 public void getnode int k node p h...