九、數據結構:字符串

字符串在c語言裏還是常用,存儲方式有三種:定長順序存儲、堆分配存儲、塊鏈存儲

定長順序存儲:即數組,有固定的長度,不可改變。

堆分配存儲:可以改變長度,用動態數組來存儲

塊鏈存儲:用鏈表來存儲字符串

1、定長順序存儲,需要預先知道要存儲的字符串的長度,事先分配數組大小。

2、堆分配存儲,需要手動malloc分配空間,使用後要用free釋放空間。可以改變數組大小,改變方法用realloc函數

以下例子是把a2數組追加到a1數組中

#include <stdio.h>

int main(int argc,char*argv[]){
    char *a1 = (char*)malloc(5*sizeof(char));   //創建了一個數組a1,分配空間大小是5
    char *a2 = (char*)malloc(5*sizeof(char));

    strcpy(a1,"helo");  //把內容放進內存空間。不能用等號賦值
    strcpy(a2,"word");

    int a1len = strlen(a1);
    int a2len = strlen(a2);

    if(a1len < a2len + a1len){
        a1 = (char*)realloc(a1,(a1len + a2len)*sizeof(char));  //擴展數組a1的大小
    }

    for(int i=a1len; i<a1len+a2len; i++){
        a1[i] = a2[i-a1len];
    }
    a1[a1len + a2len] = '\0'; //最後一個字符爲結束符

    printf("a1 = %s\n",a1);
    free(a2); //釋放空間
    free(a1);
}

3、塊鏈存儲,可以是單鏈表,雙鏈表具體根據需要來。以下用單鏈表來舉例。

鏈表的每一個節點可以存儲一個字符,也可以存儲多個字符,具體要存儲多少個字符需要根據實際情況來。

#include <stdio.h>
#define LINK_NUM 3  //每個節點存儲的字符數

typedef struct Link{
    char str[LINK_NUM];
    struct Link *next;
}link;

link * initLink(link *head, char *str){
    link *node= NULL;
    link *tmp = NULL;

    for(int i = 1; i<strlen(str)/LINK_NUM +2; i++){ //計算出一共要創建多少個節點
        node = (link*)malloc(sizeof(link));  //創建新節點

        for(int j = 0;j<LINK_NUM;j++){
            node->str[j]=str[(i-1)*LINK_NUM+j]; 
            if((i-1)*LINK_NUM+j >= strlen(str)){
                node->str[j]= '#';  //最後一共節點多出來的用#填充
            }
            
            if((i-1)*LINK_NUM+j == 0){ //第一個節點
                head = node;
                tmp = head;
            }
        }
        node->next = NULL;
        tmp ->next= node;
        tmp = node;      
    }
    return head;
}

void showLink(link *head){
    link *tmp = head;
    do{
        printf("%s",tmp->str);
        tmp = tmp -> next;
    }while(tmp != NULL);
    printf("\n");
}

int main(int argc,char*argv[]){
    link *head = NULL;
    head = initLink(head,"data.biancheng.n");
    showLink(head);
    return 0;

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章