線性表的鍊錶實現

2021-09-29 06:35:25 字數 3934 閱讀 2409

#include//printf輸出函式和scanf輸入函式所在標頭檔案

#include//exit退出函式所在標頭檔案

#include//malloc動態記憶體分配函式、realloc函式所在的標頭檔案

#includeusing namespace std;

//用#define巨集定義來定義符號常量

//函式結果狀態**

#define true 1

#define false 0

#define error 0

#define ok 1

#define error 0

#define inseasible -1

#define overflow -2

//用typedef給型別起別名

typedef int status; //status是函式的型別,其值是函式結果狀態**

typedef int elemtype; //本例中煉表各個節點中儲存int型資料

//————————————線性表的動態分配儲存結構————————————————

typedef struct lnodelnode,*linklist;

//構造乙個線性鍊錶 前插法

void createlist_l(linklist &l,int n) }

//構造乙個線性表 後插法

void createlist_ll(linklist &l,int n)

} //返回當前單連表中元素個數

status returnlistnumbers(linklist l)

return i;

} //複雜度為o(n)

//在帶頭節點的單鏈表l中第i個位置之前插入新的元素e

status listinsert_l(linklist &l,int i,elemtype e)

if(!p||j>i-1) return error;

linklist s=(linklist)malloc(sizeof(lnode));

s->data=e;

s->next=p->next;

p->next=s;

return ok;

}//複雜度為o(n)

//在帶頭節點的單鏈表l中刪除第i個元素,並用e返回其值

status listdelete_l(linklist &l,int i,elemtype &e)

if(!(p->next)||(j>i-1)) return error;//當i>n或i<1時,刪除位置不合理

linklist q = p->next;

p->next=q->next;

delete q;

return ok;

}//在帶頭節點的單鏈表l中根據序號i取值 ,並用e返回

status getelem_l(linklist &l,int i,int n,elemtype &e)

if(!p||j>n) return error;

e = p->data;

return ok;

} //在帶頭節點的單鏈表l中查詢值為e的元素

status locateelem(linklist l,int i,elemtype e)

p=p->next;

j++;

} if(p==null||j==i) return error;

} ————————合併鍊錶————————————

合併l和l1兩表 將所有在l1表中但不再l表中的資料元素新增到l中

//void union_l(linklist &l,linklist l1,int n,int n1)

// }

//}//合併l和l1兩表 (不去重),並且將元素按從小到大的順序排序

void union_ll(linklist &l,linklist l1,int n,int n1)

}//單鏈表逆序

void reverselinklist(linklist &l)

ppre = l->next;

pcur = l->next->next;

while(pcur)

l->next->next=null;

l->next=ppre;

} //給單鏈表排序

void link_sort(linklist &l)//公升序}}

}//顯示函式,將帶頭節點的單鏈線性表l中每個元素逐個顯示出來

void listdisp_l(linklist l)

printf("單鏈表資料顯示完畢!\n");

} int main()

printf("\n插入後的狀態:");

listdisp_l(l);

//——————————刪除元素——————————————

elemtype e;

int x;

printf("請輸入要刪除的位置:");

scanf("%d",&x);

listdelete_l(l,x,e);

printf("\n刪除後的狀態");

listdisp_l(l);

//——————————單鏈表的取值————————————

elemtype e1;

int z;

printf("請輸入要取的值的位置:");

scanf("%d",&z);

getelem_l(l,z,n,e1);

printf("位於第%d位置的元素為:%d \n",z,e1);

//——————————單鏈表的查詢————————————

elemtype e2;

int n2 = returnlistnumbers(l);

printf("請輸入要查詢的值:");

scanf("%d",&e2);

status p=locateelem(l,n2,e2);

if(p)

printf("元素%d存在單鏈表中!\n",e2);

if(p==0)

printf("元素%d不在單鏈表中!\n",e2);

printf("\n");

//—————————初始化單鏈表l1————————————

printf("即將初始化 l1 鍊錶,請輸入元素個數:\n");

scanf("%d",&n1);

createlist_l(l1,n1);

listdisp_l(l1);

//——————————合併兩個單鏈表(去重)——————————

// printf("\n");

// printf("將l與l1合併後,結果給l後 l 的狀態:\n");

// union_l(l,l1,n,n1);

// listdisp_l(l);

//——————————合併兩個單鏈表(不去重)——————————

printf("將l與l1合併後,結果給l後,l 的狀態(不去重):\n");

union_ll(l,l1,n,n1);

listdisp_l(l);

//——————————單鏈表的逆序———————————— ——

printf("\n單鏈表的逆序:");

reverselinklist(l);

listdisp_l(l);

//——————————返回當前單鏈表中元素個數————————

printf("\n當前單鏈表中元素個數為:%d\n",returnlistnumbers(l));

//——————————單鏈表的排序——————————————

printf("\n將單鏈表排序");

link_sort(l);

listdisp_l(l);

printf("\n\n");

} return 0;

}

線性表的鍊錶實現

include include define elemtype int typedef struct lnode list struct lnode struct lnode l list ptrl list makeempty list ptrl 建立空表 int length list ptrl...

Java實現鍊錶,線性表

package mylist public inte ce list linklist package mylist public class linklist implements list system.out.println 插入0到19 list.output system.out.prin...

線性表 鍊錶

線性表的adt list.h 線性表的c 抽象類宣告 templateclass list 單鏈表節點的定義 link.h 單鏈表節點類的定義 template class link link link nextval null 鍊錶的實現宣告 成員函式的是實現 鍊錶的實現宣告 include st...