標頭檔案:
預定義常量和型別
#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...