線性表的兩種表示:順序表示與鏈式表示。
一、順序表示。( 參見
首先,表示出線性表(動態分配順序儲存結構)
#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迴圈的時候會有的操作,第二個句子是每次...