DS 線性表2 建設「單鏈表」演算法庫

2021-08-19 19:49:01 字數 4254 閱讀 8523

任務和**:

main.cpp

/*

*檔名稱:main.c

完成日期:2018.5.9

*版本號:v2.

* *問題描述:單鏈表的應用

*問題輸出:程式的多檔案組織形式

*/

#include #include "list.h"

int main();

elemtype e1, e2;

/*首插法建立單鏈表*/

createlisth(li, x, 7);

printf("首插法建立單鏈表: ");

displist(li);

printf("\n");

/*尾插法建立單鏈表*/

createlistt2(li, x, 7);

printf("尾插法建立單鏈表: ");

displist(li);

printf("\n");

/*判斷該鍊錶是否為空,不為空則列印長度*/

if(listempty(li))

printf("該鍊錶為空");

else

printf("該煉表不為空且長為%d",listlength(li));

printf("\n\n");

/*讀指定位置的元素值並列印*/

if(getelem(li,4,e1))

printf("4號位置對應的元素: %d",e1);

else

printf("位置不在鍊錶長度之內");

printf("\n\n");

/*讀指定元素位置並列印*/

if(locateelem(li,11))

printf("元素值11對應的位置為: %d",locateelem(li,11));

else

printf("元素值11對應元素不在此鍊錶內");

printf("\n\n");

/*指定位置插入元素並列印新的鍊錶*/

listinsert(li,2,3);

printf("在第2個元素位置新增元素3:");

displist(li);

printf("\n");

/*刪除指定位置的元素並列印新的鍊錶*/

listdelete(li,5,e2);

printf("刪除5號位置元素%d後的新鍊錶:",e2);

displist(li);

printf("\n");

/*刪除元素最大的結點後的新鍊錶*/

delmaxnode(li);

printf("刪除元素最大的結點後的新鍊錶:");

displist(li);

printf("\n");

/*增序排列結點後的新鍊錶*/

sortup(li);

printf("增序排列結點後的新鍊錶:");

displist(li);

printf("\n");

/*拆分單鏈表,奇數字和偶數字上的元素各自形成鍊錶*/

printf("l->l1,l2\n");

split(li, li1, li2);

printf("子鍊錶l1: ");

displist(li1);

printf("子鍊錶l2: ");

displist(li2);

printf("\n");

return 0;

}

list.h

#ifndef list_h_included

#define list_h_included

typedef char elemtype;

typedef struct lnodelinklist;

void initlist(linklist *&l);

bool listempty(linklist *l);

void createlisth(linklist *&l, elemtype a, int n);

void createlistt1(linklist *&l, elemtype a, int n);

void createlistt2(linklist *&l, elemtype a, int n);

void destorylist(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);

void split(linklist *&l, linklist *&l1, linklist *&l2);

void delmaxnode(linklist *&l);

void sortup(linklist *&l);

#endif // list_h_included

list.cpp

#include #include "list.h"

#include //1.初始化線性表

void initlist(linklist *&l)

//2.判斷線性表是否為空表

bool listempty(linklist *l)

//3.在新結點與首結點間不斷插入新結點,

void createlisth(linklist *&l, elemtype a, int n)

}//4.在新插入的結點之後繼續插入結點

void createlistt1(linklist *&l, elemtype a, int n)

r->next=null;

}//5.在新插入的結點與null之間不斷插入新結點

void createlistt2(linklist *&l, elemtype a, int n)

}//6.銷毀線性鍊錶

void destorylist(linklist *&l)

free(pre);

}//7.求線性表的長度

int listlength(linklist *l)

return n;

}//8.輸出線性表

void displist(linklist *l)

printf("\n");

}//9.求線性表指定位置的某個元素

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

if(p==null)

return false;

else

}int locateelem(linklist *l, elemtype e)

if(p==null)

return 0;

else

return i;

}//11.插入資料元素

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

if(j==i-1)

return true;

}else

return false;

}//12.刪除資料元素

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

if(i==j)

}else

return false;

}//13.拆分單鏈表

void split(linklist *&l, linklist *&l1, linklist *&l2)

}r1->next=null;

}//14.刪除最大元素節點

void delmaxnode(linklist *&l)

pre=p;

p=p->next; //pre是p的跟隨結點

}maxpre->next=maxp->next;

free(maxp);

}//15.增序排列結點

專案 2 建設「單鏈表」演算法庫

all right reserved.檔名稱 test.cpp 完成日期 2016年9月22日 版本號 v1.2.0 問題描述 設計測試函式,可以涉及初始化線性表 銷毀線性表 輸出線性表 插入資料元素對應的函式。程式輸入 無。程式輸出 插入線性表的結果。標頭檔案 ifndef linklist h ...

線性表之單鏈表

cpp view plain copy linkedlist linc 2013.2.26 include include include define ok 1 define error 1 define ture 1 define false 0 struct node typedef stru...

線性表及單鏈表

一.頭指標與頭結點的異同 頭指標 頭指標是指鍊錶指向第乙個結點的指標,若煉表有頭結點,則是指向頭結點的指標。頭指標具有標識作用,所以常用頭指標冠以鍊錶的名字。無論鍊錶是否為空,頭指標均不為空,頭指標是鍊錶的必要元素。頭結點 頭結點是為了操作的統一和方便而建立的,放在第一元素的結點之前,其資料域一般無...