**實現:
//
// 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...