串的結構類似與線性表,只不過串的資料元素是乙個字元,即是由零個或多個字元組成的有限序列。
一、串的順序儲存
串的順序儲存結構也就是順序儲存,即串中的字元被一次的存在一組連續的儲存單元中,可以模擬線性表的順序儲存,可以寫出其資料結構如下:
typedef struct st
string;
假設現在的字串是「friend」,其結構可以用如圖所示:
現在我們拿到這個資料結構第一步就是要初始化乙個串,即首先在記憶體中開闢一段連續的儲存空間(大小可以假先預定maxsize個儲存空間),初始化其長度length為0,同時制定其串的最大容量是maxsize,如下:
//串的初始化操作
string createnullstring()
初始化完成後,我們可以模擬順序表,對串完成一系列操作,如串拷貝、取子串、串賦值等,
程式示例如下:
#include#include#define maxsize 100
typedef struct st
string;
//串的初始化操作
string createnullstring()
//判斷空串
int isempty(string s)
//賦值操作
void stringassign(string *s1,char s2)
s1->length=i;
for(i=0;ilength;i++)
s1->ch[i]=s2[i]; //從第乙個字元開始逐個字元賦值}
//串拷貝操作
void stringcopy(string *s1,string s2)
s1->length=s2.length;
int i;
for(i=0;ilength;i++)
s1->ch[i]=s2.ch[i];}
//求串的長度
int stringlength(string s)
//串的連線操作
void concat(string *s,string s1,string s2)
s->length=s1.length+s2.length; //兩串連線
int i;
for(i=0;ich[i]=s1.ch[i];
for(;ilength;i++)
s->ch[i]=s2.ch[i-s1.length]; //將s2複製到s中去}
//取子串操作
int substr(string s,int i,int len,string *t)
t->length=len;
int k;
for(k=0;klength;k++)
t->ch[k]=s.ch[i-1+k];
return 1;}
//插入操作
int insertstring(string *s,int i,string t)
int k;
for(k=s->length-1;k>=i-1;k--) //將s中的後i個字元後移到後面
s->ch[k+t.length]=s->ch[k];
s->length=s->length+t.length;
for(k=0;kch[k+i-1]=t.ch[k];
return 1;}
//刪除操作
int deletestring(string *s,int i,int len)
//輸出操作
void print(string s)
node,*linkstr;
如圖所示:
//初始化操作
linkstr createnullstring()
由此,完整的案例如下:
#include#include//鏈式串
typedef struct node
node,*linkstr;
//初始化操作
linkstr createnullstring()
//判斷空串
int iempty(linkstr s)
//賦值操作
void stringassign(linkstr s,char t)
else
r->next=null;
//將s中原來多餘的空間釋放掉
while(q!=null)
} //串拷貝操作
void assign(linkstr s,linkstr t)
//若串s原先的空間不夠用
else
//p節點後移
p=p->next;
}//同理,若q的長度過長,可以釋放多餘的空間
while(q!=null)
r->next=null;}
//求串的長度
int length(linkstr s)
return n;}
//串的連線操作
void contact(linkstr s,linkstr s1,linkstr s2)
else
p=p->next;
}p=s2->next;
while(p!=null)
else
p=p->next;
}//將串s的多餘的空間清除掉(這個情況只可能發生在while的if迴圈中)
while(q!=null)
r->next=null;
} //擷取子串
int substr(linkstr s,int i,int len,linkstr t)
else
p=p->next;
}while(q!=null)
r->next=null;
return 1;}
//插入操作
int insert(linkstr s,int i,linkstr t)
return 1;}
//刪除操作
int deletestring(linkstr s,int i,int len)
return 1; }
//列印輸出
void print(linkstr s)
printf("\n");}
void main()
結果如圖:
演算法與資料結構之順序串
include include define maxsize 100 typedef struct 非緊縮格式的順序串的定義 sqstring void strassign sqstring s 將字串複製給串 sqstring concate sqstring s 串的連線 void insstr...
演算法與資料結構之順序串
include include define maxsize 100 typedef struct 非緊縮格式的順序串的定義 sqstring void strassign sqstring s 將字串複製給串 void dispstr sqstring s 輸出串的所有元素 printf n vo...
資料結構 串的順序儲存
include iostream using namespace std define maxstrsize 256 typedef struct mystring mystring 掩飾符號型別。例如當需要定義多個包含80個元素的陣列a,b,c時,可以這樣定義 typedef char array...