任務和**:
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...
線性表及單鏈表
一.頭指標與頭結點的異同 頭指標 頭指標是指鍊錶指向第乙個結點的指標,若煉表有頭結點,則是指向頭結點的指標。頭指標具有標識作用,所以常用頭指標冠以鍊錶的名字。無論鍊錶是否為空,頭指標均不為空,頭指標是鍊錶的必要元素。頭結點 頭結點是為了操作的統一和方便而建立的,放在第一元素的結點之前,其資料域一般無...