資料結構學習二 順序表演算法2 7改寫

2021-10-04 02:25:46 字數 3527 閱讀 7538

標頭檔案:

預定義常量和型別

#ifndef _init_h

#define _init_h

#include

#define true 1

#define fallse 0

#define ok 1

#define error -1

#define overflow -2

typedef

int status;

//型別定義

#endif

#ifndef _sequence_h

#define listsize 100

//注意:item暫時只能定義為基本型別,因為在實現的時候沒有molloc(sizeof(item)),可以自行改變item的大小

#define listincerement 10

//線性表儲存空間的分配增量

typedef

int elemtype;

//定義型別

typedef

struct

sqlist;

status init_sqlist

(sqlist &l)

;//構造乙個空表

status insert_list

(sqlist &l,

int i,elemtype e)

;//插入元素e到順序列表的第i個位置

status delete_list

(sqlist &l,

int i,elemtype &e)

;//刪除第i個元素並返回給e;

status display_list

(sqlist)

;//顯示順序表

status merge_list

(sqlist la,sqlist lb,sqlist &lc)

;//合併兩個順序列表

#endif

操作:

#include

"init.h"

#include

"sequence.h"

#include

using

namespace std;

status init_sqlist

(sqlist &l)

//構造空表l

l.length=0;

l.listsize=listsize;

//初始儲存量

return ok;

}//基本操作listinsert(&l,i,e);

//初始條件:線性表l已經存在,1≤i≤listlength(l)+1;

//操作結果:在l中的第i個位置之前插入新的資料元素e,l的長度加1;

status insert_list

(sqlist &l,

int i,elemtype e)

//插入e元素到第i位

if(l.length>=l.listsize)

//超出原有的儲存容量,需要重新分配

l.elem=newbase;

//新基址

l.listsize +

=listincerement;

//增加的儲存容量

} elemtype *q,

*p; q=

&l.elem[i-1]

;//q為插入位置

for(p=

&l.elem[l.length-1]

;p>=q;

--p)

//插入位置及之後元素的位置右移

*q=e;

//插入e

++l.length;

//表長增加1

return ok;

}//基本操作:listdelete(&l,i,&e);

//初始條件:線性表l已經存在且非空,1≤i≤listlength(l);

//操作結果:刪除l的第i個資料元素,並用e返回其值,l的長度減1;

status delete_list

(sqlist &l,

int i,elemtype &e)

//在順序表中刪除第i個元素,返回e值

elemtype *p,

*q; p=

&l.elem[i-1]

;//p為被刪除的元素的位置

e=*p;

//被刪除的元素賦值給e

q=l.elem+l.length-1;

//表尾元素的位置

for(

++p;p<=q;

++p)

//刪元素後元素左移

--l.length;

//表長減一

return ok;

}status display_list

(sqlist l)

cout<

return ok;

}//已知順序線性表la和lb的元素按值非遞減排列;

//歸併la和lb得到新的順序線性表lc,lc的元素也按值非遞減排列;

status merge_list

(sqlist la,sqlist lb,sqlist &lc)

//合併兩個列表

else

*pc++

=*pb++;}

while

(pa<=la.elem+la.length-1)

*(pc++)=

*(pa++);

//插入la剩餘的元素

while

(pb<=lb.elem+lb.length-1)

*(pc++)=

*(pb++);

//插入lb剩餘的元素

return ok;

}

main.cpp

#include

"init.h"

#include

"sequence.h"

#include

using

namespace std;

void

test_sequence()

intmain()

執行結果:

演算法2.7改寫:「開關語句」代替「條件語句」

運用了乙個compare()函式比較la和lb中對應元素的大小。

status compare

(elemtype *pa,elemtype *pb)

將marge_list操作中的if條件語句替換成switch語句:

switch

(compare

(pa,pb)

)

執行結果:

資料結構學習筆記(一) 順序表

一般來說,由於順序表結點的位序從1開始,而c語言中向量的下標從0開始,若從下標為1的向量元素開始使用,使結點的位序和向量的下標一致,則處理會簡單一些,下標為0的元素不用或用作其它用途。include include using namespace std define maxsize 1024 結構...

資料結構學習筆記1順序表

初始化需要定義的三個要素 c語言 實現 typedef struct table table c語言 實現 table inittable t.length 0 t.size size return t c語言 實現 table addtable table t,int elem,int add i...

C語言資料結構學習 順序表

include include define size 5 typedef struct sequencetable sequencetable brief 初始化順序表 return sequencetable sequencetable inittable st.length 0 st.size...