#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct
{
ElemType *elem;
int length;
int listsize;
} SqList;
Status InitList(SqList *L)
{
L->elem=(ElemType *)malloc(sizeof(ElemType)*LIST_INIT_SIZE);
if(!L->elem) exit(OVERFLOW);
L->length=0;
L->listsize=LIST_INIT_SIZE;
return OK;
}
Status DestroyList(SqList *L)
{
if(!L->elem) return ERROR;
L->elem=NULL;
return OK;
}
Status ListEmpty(SqList L)
{
if(!L.length) return TRUE;
else return FALSE;
}
Status ListLength(SqList L)
{
return L.length;
}
Status ClearList(SqList *L)
{
if(!ListEmpty(*L))
L->length=0;
return OK;
}
Status GetElem(SqList L, int i, ElemType *e)
{
if(i<1 || i>L.length) return ERROR;
*e=L.elem[i-1];
return OK;
}
Status equal(ElemType a, ElemType b)
{
if(a==b) return TRUE;
else return FALSE;
}
Status LocateElem(SqList L, ElemType e, Status (*compare)(ElemType, ElemType))
{
int i=1;
while(i<=L.length && !compare(L.elem[i-1], e)) i++;
if(i<=L.length) return i;
else return ERROR;
}
Status PriorElem(SqList L, ElemType cur_e, ElemType *pre_e)
{
int i=LocateElem(L, cur_e, equal);
if(i>1)
{
GetElem(L, i-1, pre_e);
return OK;
}
return ERROR;
}
Status NextElem(SqList L, ElemType cur_e, ElemType *next_e)
{
int i=LocateElem(L, cur_e, equal);
if(i && i<L.length)
{
GetElem(L, i+1, next_e);
return OK;
}
return ERROR;
}
Status ListInsert(SqList *L, int i, ElemType e)
{
if(i<1 || i>(L->length+1)) return ERROR;
if(L->length==L->listsize)
{
ElemType *newbase;
newbase=(ElemType *)realloc(L->elem, (L->listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase) exit(OVERFLOW);
L->elem=newbase;
L->listsize+=LISTINCREMENT;
}
ElemType *p, *q;
q=&L->elem[i-1];
for(p=&L->elem[L->length-1]; p>=q; p--) *(p+1)=*p;
*q=e;
(L->length)++;
return OK;
}
Status ListDelete(SqList *L, int i, ElemType *e)
{
if(i<1 || i>(L->length+1)) return ERROR;
ElemType *p, *q;
p=&L->elem[i-1];
*e=*p;
q=&L->elem[L->length-1];
for(++p; p<=q; p++) *(p-1)=*p;
(L->length)--;
return OK;
}
void Union(SqList *La, SqList Lb)
{
ElemType e;
int i;
int La_len=ListLength(*La);
int Lb_len=ListLength(Lb);
for(i=1; i<=Lb_len; i++)
{
GetElem(Lb, i, &e);
if(!LocateElem(*La, e, equal))
ListInsert(La, ++La_len, e);
}
}
void MergeList(SqList La, SqList Lb, SqList *Lc)
{
InitList(Lc);
int i=1, j=1;
int k=0;
ElemType ai, bj;
int La_len=ListLength(La);
int Lb_len=ListLength(Lb);
while((i<=La_len)&&(j<=Lb_len))
{
GetElem(La, i, &ai);
GetElem(Lb, j, &bj);
if(ai<=bj)
{
ListInsert(Lc, ++k, ai);
i++;
}
else
{
ListInsert(Lc, ++k, bj);
j++;
}
}
while(i<=La_len)
{
GetElem(La, i++, &ai);
ListInsert(Lc, ++k, ai);
}
while(j<=Lb_len)
{
GetElem(Lb, j++, &bj);
ListInsert(Lc, ++k, bj);
}
}
/**********O(La.length+Lb.length)**********/
void MergeList_Sq(SqList La, SqList Lb, SqList *Lc)
{
ElemType *pa=La.elem;
ElemType *pb=Lb.elem;
Lc->listsize=Lc->length=La.length+Lb.length;
ElemType *pc=Lc->elem=(ElemType *)malloc(sizeof(ElemType)*Lc->listsize);
if(!Lc->elem) exit(OVERFLOW);
int *pa_last=La.elem+La.length-1;
int *pb_last=Lb.elem+Lb.length-1;
while(pa<=pa_last && pb<=pb_last)
if(*pa<=*pb) *pc++=*pa++;
else *pc++=*pb++;
while(pa<=pa_last) *pc++=*pa++;
while(pb<=pb_last) *pc++=*pb++;
}
void PrintList(SqList L)
{
int i;
for(i=1; i<=L.length; i++)
printf("%d ", L.elem[i-1]);
printf("\n");
}
void CreateList(SqList *L)
{
InitList(L);
int Num, i;
ElemType e;
scanf("%d", &Num);
for(i=1; i<=Num; i++)
{
scanf("%d", &e);
ListInsert(L, i, e);
}
}
int main()
{
SqList La, Lb, Lc;
CreateList(&La);
CreateList(&Lb);
MergeList_Sq(La, Lb, &Lc);
PrintList(Lc);
return 0;
}
線性表(動(dòng)態(tài)數(shù)組)
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)婚被,“玉大人狡忙,你說(shuō)我怎么就攤上這事≈沸荆” “怎么了灾茁?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)谷炸。 經(jīng)常有香客問(wèn)我北专,道長(zhǎng),這世上最難降的妖魔是什么旬陡? 我笑而不...
- 正文 為了忘掉前任拓颓,我火速辦了婚禮,結(jié)果婚禮上描孟,老公的妹妹穿的比我還像新娘驶睦。我一直安慰自己,他們只是感情好匿醒,可當(dāng)我...
- 文/花漫 我一把揭開(kāi)白布场航。 她就那樣靜靜地躺著,像睡著了一般廉羔。 火紅的嫁衣襯著肌膚如雪溉痢。 梳的紋絲不亂的頭發(fā)上,一...
- 那天,我揣著相機(jī)與錄音孩饼,去河邊找鬼髓削。 笑死,一個(gè)胖子當(dāng)著我的面吹牛镀娶,可吹牛的內(nèi)容都是我干的蔬螟。 我是一名探鬼主播,決...
- 文/蒼蘭香墨 我猛地睜開(kāi)眼汽畴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了耸序?” 一聲冷哼從身側(cè)響起忍些,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎坎怪,沒(méi)想到半個(gè)月后罢坝,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡搅窿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年嘁酿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片男应。...
- 正文 年R本政府宣布耐朴,位于F島的核電站借卧,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏筛峭。R本人自食惡果不足惜铐刘,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望影晓。 院中可真熱鬧镰吵,春花似錦、人聲如沸挂签。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)竹握。三九已至画株,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背谓传。 一陣腳步聲響...
- 正文 我出身青樓紧卒,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親诗祸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子跑芳,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 對(duì)于線性結(jié)構(gòu)的順序表而言,特點(diǎn): ···1.添加和刪除元素直颅,時(shí)間復(fù)雜度是O(n),因?yàn)橐苿?dòng)元素.博个。 ···(1)...
- 在計(jì)算機(jī)內(nèi)存組織中,只有兩種存儲(chǔ)數(shù)據(jù)的基本形式:數(shù)組和鏈表功偿。 (1)數(shù)組的管理: int a[100];//就是在...
- 第一步盆佣,定義順序表的結(jié)構(gòu)和相關(guān)的數(shù)組或變量,和初始化和清空列表械荷。 第二步共耍,判斷表是否為空和判斷表是否已滿。 第三步...
- 本文行文思路結(jié)構(gòu) 一. 線性表 線性結(jié)構(gòu)是數(shù)據(jù)結(jié)構(gòu)中三種基本結(jié)構(gòu)之一. 而線性結(jié)構(gòu)的特點(diǎn)是:在數(shù)據(jù)元素的非空有限集...