版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/u013009576/article/details/77133257
一.順序串
1.1定義
串的順序實現是指分配一塊連續的存儲單元用於串中的元素,並附設表示串長度的標誌。
串的順序結構存儲可以描述爲:
typedef char ElemType;
typedef struct{
ElemType data[MaxSize];
int length;
}String;
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
1.2基本操作
1.2.1創建串
輸入字符元素,以“#”號作爲結束標誌。
void StrCreat(String* S){
char x;
S->length=0;
printf("Input String_S(End of '#'!):\n");
scanf("%c",&x);
while(x!='#'){
S->data[S->length++]=x;
scanf("%c",&x);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
1.2.2求串長度
因爲串的定義中有length變量,只需返回結果便可。
int StrLength(String* S){
return S->length;
}
- 1
- 2
- 3
- 1
- 2
- 3
1.2.3拷貝字符串
將字符串S拷貝到字符串T中,對字符串依次訪問,同時賦值於字符串T即可完成拷貝。
void StrCopy(String* S, String* T){
for(int i=0;i<S->length;i++){
T->data[i]=S->data[i];
}
T->length=S->length;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
1.2.4比較字符串大小
字符串大小比較實際是比較ASCII碼大小,從左向右依次比較,如果此時哪個字符串的ASCII碼值比較大,則返回結果;如果兩個字符串長度不相等,但前面若干個字符均相等,則長度大的字符串比較大。
int StrCompare(String* S,String* T){
int i=0;
while(i!=S->length&&i!=T->length){
if(S->data[i]<T->data[i]){
return -1;
}else if(S->data[i]>T->data[i]){
return 1;
}else{
i++;
}
}
if(i<S->length){
return 1;
}else if(i<T->length){
return -1;
}else{
return 0;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
1.2.5連接字符串
將字符串T連接在字符串S後,注意此時S的長度以便,注意修改length變量。
void StrConcat(String* S, String* T){
int i=S->length;
for(i=i+1;i<S->length+T->length;i++){
S->data[i]=T->data[i-S->length];
}
S->length=i;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
1.2.6以串S中pos位置開始的len個字符生成子串Sub
因爲採用的是順序存儲結構,可以使用函數隨機訪問,直接找到pos位置,然後將其後len個字符串均賦值給新的子串T便可。
String* SubString(String*S,int pos,int len){
String *T;
T=(String*)malloc(sizeof(String));
T->length=0;
if(pos>S->length||(pos+len)>S->length){
printf("Illege Position!\n");
exit(0);
}
for(int i=pos;i<pos+len;i++){
T->data[T->length++]=S->data[i];
}
return T;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
二.鏈串
2.1定義
採用鏈式存儲的串稱爲鏈串。一般採用不帶頭結點的單鏈表實現。
鏈串的數據結構描述如下:
typedef struct SNode
{ ElemType data;
struct SNode *next;
}String;