// c4-3.h 串的塊鏈儲存結構(見圖4.7)
#define chunk_size 4 // 可由使用者定義的塊大小
圖48 是根據c4-3.h 定義的串「abcdefghi」的一種可能的儲存形式(「#」作為
填補空餘的字元,不計為串的字元)。
// bo4-3.cpp 串採用塊鏈儲存結構(由c4-3.h定義)的基本操作(15個)
#define destroystring clearstring // destroystring()與clearstring()作用相同
void initstring(lstring &t)
status strassign(lstring &t,char *chars)
if(!*chars) // 最後乙個鏈塊
}return ok;
}status tochars(lstring t,char* &chars)
chars[t.curlen]=0; // 串結束符
return ok;
}status strcopy(lstring &t,lstring s)
status strempty(lstring s)
int strcompare(lstring s,lstring t)
s.head=s.tail=null;
s.curlen=0;
}status concat(lstring &t,lstring s1,lstring s2)
status substring(lstring &sub, lstring s,int pos,int len)
int index(lstring s,lstring t,int pos)
} return 0;
}status strinsert(lstring &s, int pos,lstring t)
status strdelete(lstring &s,int pos,int len)
status replace(lstring &s,lstring t,lstring v) // 此函式與串的儲存結構無關
// main4-3.cpp 檢驗bo4-3.cpp的主程式
char blank='#'; // 全域性變數,用於填補空餘
#include"c1.h"
#include"c4-3.h"
#include"bo4-3.cpp"
void main()
else
printf("出錯\n");
printf("串t1空否?%d(1:空0:否) 串長=%d\n",strempty(t1),strlength(t1));
strassign(t2,s2);
printf("串t2為");
strprint(t2);
strcopy(t3,t1);
printf("由串t1拷貝得到串t3,串t3為");
strprint(t3);
initstring(t4);
strassign(t4,s5);
printf("串t4為");
strprint(t4);
replace(t3,t4,t2);
printf("用t2取代串t3中的t4串後,串t3為");
strprint(t3);
clearstring(t1);
printf("清空串t1後,串t1空否?%d(1:空0:否) 串長=%d\n",strempty(t1),strlength(t1));
concat(t1,t2,t3);
printf("串t1(=t2+t3)為");
strprint(t1);
pos=index(t1,t3,1);
printf("pos=%d\n",pos);
printf("在串t1的第pos個字元之前插入串t2,請輸入pos: ");
scanf("%d",&pos);
k=strinsert(t1,pos,t2);
if(k)
else
printf("插入失敗!\n");
printf("求從t1的第pos個字元起,長度為len的子串t2,請輸入pos,len: ");
scanf("%d,%d",&pos,&len);
substring(t2,t1,pos,len);
printf("串t2為");
strprint(t2);
printf("strcompare(t1,t2)=%d\n",strcompare(t1,t2));
printf("刪除串t1中的子字串:從第pos個字元起刪除len個字元。請輸入pos,len:");
scanf("%d,%d",&pos,&len);
k=strdelete(t1,pos,len);
if(k)
destroystring(t1); // 銷毀操作同清空
}
**的執行結果如下:
/*
初始化串t1後,串t1空否?1(1:空0:否) 串長=0
出錯出錯
串t1為abcdefghi
串t1空否?0(1:空0:否) 串長=9
串t2為12345
由串t1拷貝得到串t3,串t3為abcdefghi
串t4為abcd
用t2取代串t3中的t4串後,串t3為12345efghi
清空串t1後,串t1空否?1(1:空0:否) 串長=0
串t1(=t2+t3)為1234512345efghi
pos=6
在串t1的第pos個字元之前插入串t2,請輸入pos: 1
插入串t2後,串t1為123451234512345efghi
求從t1的第pos個字元起,長度為len的子串t2,請輸入pos,len: 3,2
串t2為34
strcompare(t1,t2)=-1
刪除串t1中的子字串:從第pos個字元起刪除len個字元。請輸入pos,len:6,15
從第6位置起刪除15個元素後串t1為12345
press any key to continue
*/
由bo4-3.cpp 可見,串的塊鏈儲存結構優勢很少,一般不用。 資料結構 串(串的順序儲存和塊鏈儲存)
一 串的定義 二 串的儲存結構 1.串的順序儲存結構 2.串的定長順序儲存及運算 3.串的塊鏈儲存結構 串 字串 是一種特殊的線性表,它的資料元素僅有乙個字元組成。一般情況下處理的非數值型資料物件經常是字串資料,例如在事務處理中,顧客的姓名 位址 貨物產地等,一般都作為字串處理。通常以 串的整體 作...
串的儲存結構
串的儲存結構與線性表相同,分為兩種。1.串的順序儲存結構 串的順序儲存結構是用一組位址連續的儲存單元來儲存串中的字串行的。按照預定義的大小,為每個定義的串變數分配乙個固定長度的儲存區。一般是用定長數值來定義。對於串的順序儲存,串值的儲存空間可在程式執行過程中動態分配而得。比如在計算機中存在乙個自由儲...
串的儲存結構
串處理的資料元素只能是字元,是由零個或多個字串組成的有序序列,又名叫字串。串中元素邏輯關係和線性表的相同,串也分為順序儲存結構和鏈式儲存結構。順序儲存結構就是資料元素的邏輯關係直接對映到物理位置,用物理位置的先後表示邏輯先後。順序儲存結構的實現 串的順序儲存可以用陣列實現 typedef struc...