串的資料結構表 順序串與鏈式串

2021-09-19 14:45:14 字數 3449 閱讀 3050

串的結構類似與線性表,只不過串的資料元素是乙個字元,即是由零個或多個字元組成的有限序列。

一、串的順序儲存

串的順序儲存結構也就是順序儲存,即串中的字元被一次的存在一組連續的儲存單元中,可以模擬線性表的順序儲存,可以寫出其資料結構如下:

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...