資料結構 串(C語言實現)

2021-09-19 08:44:53 字數 2335 閱讀 6634

一.串的定義

串是由零個或者多個字元組成的有限序列。串中任意連續的字元組成的子串行稱為該串的字串,包含字串的串稱為主串

在c語言中,串可以使用如下語句定義:

char str = "hello world!";
上面的串裡面一共有12個字元,但是編譯器以 『\0』 作為字串結束標誌,所以陣列str的長度為13串str的長度為12

二.串的儲存結構

定長順序表示

串的定長順序表示指的是採用乙個固定長度的陣列來儲存串,但是並不像上面那樣直接定義,而是額外定義乙個變數儲存所儲存陣列中串的長度。

typedef struct

str;

變長分配儲存表示變長分配儲存表示(又叫動態分配儲存表示)是指定義乙個指向儲存區的首位址的指標,根據需要不斷申請記憶體來儲存串。

typedef structstr;
三.串的基本操作賦值操作

int strassign(str *s, char *ch)

if(len == 0)

else //將字串賦值

s->length = len;

return ok;

} }}

串比較操作

int strcompare(str s1, str s2) 

if(s1.length > s2.length)

return 1;

else if(s1.length < s2.length)

return 2;

else

return 0;

}

串連線操作

int strconcat(str *s, str s1, str s2)

s->ch = (char *)malloc((s1.length+s2.length+1)*sizeof(char));

if(s->ch == null)

return error;

while(ich[i] = s1.ch[i];

++i;

} while(jch[i+j] = s2.ch[j];

++j;

} s->length = s1.length + s2.length;

return ok;

}

演示**及結果

int main(int argc, char *ar**) ,s2 = ,s = ;

//這裡必須兩個都要初始化

strassign(&s1,"hello ");

printf("字串1為:");

printf(s1.ch);

printf("\t長:%d \n",s1.length);

strassign(&s2,"world!");

printf("字串2為:");

printf(s2.ch);

printf("\t長:%d \n",s2.length);

printf("兩個字串比較結果:%d\n",strcompare(s1, s2));

strconcat(&s, s1, s2);

printf("兩個字串貼上後為:");

printf(s.ch);

printf("\t長:%d \n",s.length);

結果正確!

——————————————————————————————————

這次遇到乙個問題,在主函式中如果定義結構體三個s不初始化,只有第乙個可以使用,後續的無效,所以必須將三個都初始化。

結構體初始化,都初始化就都有記憶體空間位址都可以都引用,預設初始化,第乙個系統預設給個記憶體空間,第二個系統還會給嗎

資料結構 C語言實現串

include stdlib.h include stdio.h define true 1 define false 0 define maxlen 255 typedef int status typedef structstring 串的賦值 void strassign string s,c...

資料結構 佇列(C語言實現)

佇列 c語言實現 include include define queueisempty arg arg size 0 define queueisfull arg arg size arg capacity 判斷是否為空或為滿。巨集定義,函式調銷太大。佇列使用size和capacity顯式的判斷是...

資料結構C語言實現 ADT Triplet

declartion.h 型別宣告 define true 1 define false 0 define ok 1 define error 0 define infeasible 1 define overflow 2 define elemtype int typedef elemtype t...