歸併的具體實現

2021-07-28 09:58:42 字數 2494 閱讀 2482

線性表的兩種表示:順序表示與鏈式表示。

一、順序表示。(  參見   

首先,表示出線性表(動態分配順序儲存結構)

#define list_inti_size 100  //線性表的初始分配量  

#define listincrement 10 //線性表儲存空間的分配增量

//避免初始分配量不夠,實現靈活的再分配,且再分配時借助基址與realloc函式進行增加容量

typedef struct sqlist;

此處,資料元素型別約定為elemtype。

初始化線性表:

status initlist(sqlist &l)

exit(0)表示正常退出,exit(x)(x不為0)都表示異常退出,這個x是返回給作業系統(包括unix,linux,和ms dos)的,以供其他程式使用。與return()的不同方是return是返回上一級,而exit會終止程式。

數值插入:

status listinsert(sqlist &l,int i,int e)

q = &(l.elem[i - 1]);//p為插入位置

for (p = &(l.elem[l.length - 1]); p >= q; --p)

*(p + 1) = *p;

*q = e;//插入e

++(l.length);//表長增1

return ok;

}

整段**如下:

#include#include#define list_inti_size 100  //線性表的初始分配量  

#define listincrement 10 //線性表儲存空間的分配增量

//避免初始分配量不夠,實現靈活的再分配,且再分配時借助基址與realloc函式進行增加容量

#define overflow -2

#define ok 1

#define error 0

typedef int elemtype;

typedef int status;

typedef struct sqlist;

status initlist(sqlist &l)

int listlength(sqlist &l)

return i+1; //返回長度

}void getelem(sqlist l, int i,int &e)

e = l.elem[i - 1];

}status listinsert(sqlist &l,int i,int e)

q = &(l.elem[i - 1]);//p為插入位置

for (p = &(l.elem[l.length - 1]); p >= q; --p)

*(p + 1) = *p;

*q = e;//插入e

++(l.length);//表長增1

return ok;

}void mergelist(sqlist la, sqlist lb, sqlist &lc)

else

} while (i <= la_len)

while (j <= lb_len)

}int main()

中間不知道該如何求解線性表的長度,想不出其他方法,只好依據其元素非遞減排列進而進行判斷。

mergelist()為上篇文章中最清晰的演算法,其中呼叫listinsert()將元素值按非遞減順序一次存入。

同,也可使用指標,直接對所求線性表進行賦值。

其使用如下:

#include#include#define list_inti_size 100  //線性表的初始分配量  

#define listincrement 10 //線性表儲存空間的分配增量

//避免初始分配量不夠,實現靈活的再分配,且再分配時借助基址與realloc函式進行增加容量

#define overflow -2

#define ok 1

#define error 0

typedef int elemtype;

typedef int status;

typedef struct sqlist;

status initlist(sqlist &l)

int listlength(sqlist &l)

return i+1; //返回長度

}void mergelist(sqlist la, sqlist lb, sqlist &lc)

else

} while (pa <= pa_last)

while (pb <= pb_last)

}int main()

通過指標顯然更為簡單。

**還有許多不足,還望大家指教

歸併具體實現(二) 鏈式表示

線性表的鏈式表示 typedef struct lnode lnode,linklist 建立鍊錶 void createlist linklist l,int n 實際,我覺得這塊不加 也行,只不過呼叫前需將所要建立的節點進行初始化。我的理解,一般而言,加乙個 就相當於引用一般,這函式裡改變後其他...

歸併排序及具體介紹

include include 複雜度分析 t n t n 2 t n 2 o n t n o nlogn 歸併作用是將兩個序列合併 l 左邊起始位置,r 右邊起始位置 rightend 右邊終點位置 void merge int a,int tmpa,int l,int r,int righten...

continue的具體實現

先看下面乙個 include int main i include int main i 這兩段 有什麼區別嗎?當然有,區別很大,乙個會永遠迴圈,乙個則不會,要理解continue在這裡的用處先要理解for迴圈,for迴圈的三個句子,第乙個句子,是剛剛進入for迴圈的時候會有的操作,第二個句子是每次...