用c语言实现串的存储结构是指,数据结构学习笔记-串(C语言实现)
串由零個或多個字符組成,說白了就是字符串。串的存儲方式相對于線性表來講有些不同,他分為以下幾種:順序存儲、堆分配存儲、鏈式存儲。順序存儲通常在數組中的頭元素存放字符串長度。堆分配存儲通常會動態分配空間。鏈式存儲分為兩種,一種是每個節點存放一個字符(比較浪費空間),另一種則是每個節點存放多個字符,如果字符不是剛好,就用#代替。(c中字符串定義會有以下幾種形式:字符串常量"hello",char數組char m[40] = "hello,world",char指針char *m = "hello,world"。字符串碰到‘\0’結束,定義的字符串末尾都會被系統添加‘\0’)這幾種串的存儲實現原理都一樣,只是方式有些異同。以下是串的基本操作:
基本操作:
init(t?,?chars)
初始條件:?chars是一個字符串常量。
操作結果:生成一個值為chars的串t。
connection(s,?t)
初始條件:串s,?t?已存在。
??????操作結果:將串t聯結到串s后形成新串存放到s中。
getLength(t)
初始條件:字符串t已存在。
操作結果:返回串t中的元素個數,稱為串長。
SubString?(s,?pos,?len,?sub)
初始條件:串s,?已存在,?1≦pos≦StrLength(s)且?0≦len≦StrLength(s)?–pos+1。
操作結果:用sub返回串s的第pos個字符起長度為len?的子串。
下面是串的鏈式存儲代碼實現:
#include #include //串的鏈式存儲
typedef struct charNode{
char data;
struct charNode *next;
}charNode;
typedef charNode *charLink;
//c中字符串會有以下幾種形式:字符串常量"hello",char數組char m[40] = "hello,world",char指針char *m = "hello,world"
void init(charLink *c,char s[]){
charLink p,q;
(*c)=(charLink)malloc(sizeof(charNode));//創建鏈式串
q=*c;//定義指針指向串
for(int i=0;s[i]!='\0';i++){//c里面所有定義的字符串后面都會有一個‘\0’,他代表結束
p=(charLink)malloc(sizeof(charNode));
p->data=s[i];//這里類似鏈表的尾插法
q->next=p;
q=p;
}
q->next=NULL;
}
//獲取串長度
int getLength(charLink c){
int i=0;
charLink p;
p=c;
while(p->next){
p=p->next;
i++;
}
return i;
}
//將兩個串拼成一個串
void connection(charLink *c,charLink b){
charLink p=(*c)->next;//定義一個指針指向c的第一個字符。
charLink p2=b;//定義一個指針指向b
charLink p3;//用來存儲在b中取出的字符節點
char s;//用來存放從b中取出的字符數據
while(p2->next){//從b的第一個字符節點開始取
p2=p2->next;
s=p2->data;
while(p->next){//從c的第一個字符節點的next開始判斷,如果不為空,就向下指,直到p成為c的最后一個字符節點
p=p->next;
}
p3=(charLink)malloc(sizeof(charNode));
p3->data=s;
p->next=p3;//類似鏈表的尾插法,讓后插入的數據都往后排
p=p3;
}
p->next=NULL;
}
void substring(charLink c,int index,int slength,charLink *s){
//當index+slength<=(*s).length+1時才能取
charLink p,z;
*s=(charLink)malloc(sizeof(charNode));
z=*s;
p=c->next;
int i=1,j=1;
//拿到主串的要取數據的第一個位置
while(p->next&&inext;
i++;
}
//取值賦值
while(p&&j<=slength){
charLink n=(charLink)malloc(sizeof(charNode));
n->data=p->data;
z->next=n;
z=n;
p=p->next;
j++;
}
z->next=NULL;
}
void display(charLink c){
charLink p=c->next;
while(p){
char q=p->data;
printf("%c ",q);
p=p->next;
}
printf("\n");
}
int main()
{
charLink c,b,z;
char c1[20]="hello hello";
char c2[20]=" world world";
char c3[10]="";
init(&z,c3);
init(&c,c1);
display(c);
init(&b,c2);
display(b);
connection(&c,b);
display(c);
printf("串的長度為:\n%d\n",getLength(c));
substring(c,1,5,&z);
display(z);
return 0;
}
總結
以上是生活随笔為你收集整理的用c语言实现串的存储结构是指,数据结构学习笔记-串(C语言实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手机内存新选择!速度飞快、稳定如山、省电
- 下一篇: linux 标准输入句柄,标准文件描述符