C Language 串 - 链串(十)

链式存储结构大同小异,不再多叙述

  • 结构体以及初始化算法:
//链表结构体
typedef struct Snode {
	char ch;
	struct Snode *next;
} LinkStrNode;
//初始化结构体
void initSnode(LinkStrNode *&node) {
	node = (LinkStrNode*)malloc(sizeof(LinkStrNode));
	node->next = NULL;
}
  • 创建链表算法:
#define MaxSize 6
//创建链表
void createLinkStr(LinkStrNode *&node) {

	char chs[MaxSize] = {'a','b','c','d','e','f'};
	int index = 0;
	LinkStrNode *r , *p;
	r = node;
	for(index;index < MaxSize ; index++){
		p = (LinkStrNode*)malloc(sizeof(LinkStrNode));
		p->ch = chs[index];
		r->next = p; r = p;
	}
	r->next = NULL;
}
  • 销毁链表算法:
//销毁串算法
void destoryStr(LinkStrNode *&node){
	LinkStrNode *pre = node , *p = node->next;
	
	while(p!=NULL){
		free(pre);
		pre = p;
		p = pre->next; 
	}
	free(pre);
} 
  • 输出链表:
//输出链表
void DispStr(LinkStrNode *&node){
	LinkStrNode *r;
	r = node->next;
	while(r != NULL){
		printf("%3c",r->ch);
		r = r->next;
	}
}
  • 串的复制算法:
//串的复制操作
void copyStr(LinkStrNode *preNode,LinkStrNode *&newNode){

	initSnode(newNode);
	LinkStrNode *pre = preNode->next , *r , *p;
	r = newNode;
	while(pre != NULL){
		p = (LinkStrNode*)malloc(sizeof(LinkStrNode));
		p->ch = pre->ch;
		r->next = p;  r = p;
		pre = pre->next;
	}
	r->next = NULL;	
} 
  • 判断字符串是否相等算法:
//判断两个字符串是否相等
void strEqual(LinkStrNode *preNode,LinkStrNode *newNode){
	LinkStrNode *p = preNode->next , *q = newNode->next;
	if(p == NULL || q == NULL){
		printf("空链不比较");
		exit(0);
	}
	bool flag = false;
	while(p != NULL && q != NULL && p->ch == q->ch){
		p = p->next;
		q = q->next;
	}
		if(p == NULL && q == NULL){
			flag = true;
		}
		
	if(flag){
		printf("相等");
	}else{
		printf("不相等");
	}
	
}
  • 求串长度算法:
//求串的长度
int strLength(LinkStrNode *node){
	LinkStrNode *p = node->next;
	int len = 0;
	while(p!=NULL){
		len++;
		p = p->next;
	}
	return len;
} 
  • 连接串算法:
//连接串
void concat(LinkStrNode *p , LinkStrNode *q , LinkStrNode *&n){
	int len = strLength(p) + strLength(q); //获取长度 
	LinkStrNode *s1 = p->next , *s2 = q->next , *r;
	initSnode(n);
	r = n;
	int index = 0;
	printf("\n%3d",len);
	while(index < len){ //拼串 
		if(s1!=NULL){
			r->next = s1;
			s1 = s1->next;
		}else{
			r->next = s2;
			s2 = s2->next; 
		}	
			r = r->next;
		index++;
	}
	r->next = NULL;	
} 
  • main函数:
	LinkStrNode *s , *newNode , *n;
	initSnode(s);
	createLinkStr(s);
	DispStr(s);
	copyStr(s,newNode);
	printf("\n");
	DispStr(newNode);
	printf("比较两个字符串:\n");
	strEqual(s,newNode);
	printf("\n");
	int len = strLength(newNode);
	printf("求字符串长度为:%3d",len);
	concat(s,newNode,n);
	printf("\n");
	DispStr(n);
	return 0;
}
  • 结果展示如下:

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值