当前位置:   article > 正文

C Language 串 - 链串(十)_链串的复制c语言

链串的复制c语言

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

  • 结构体以及初始化算法:
//链表结构体
typedef struct Snode {
	char ch;
	struct Snode *next;
} LinkStrNode;
//初始化结构体
void initSnode(LinkStrNode *&node) {
	node = (LinkStrNode*)malloc(sizeof(LinkStrNode));
	node->next = NULL;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 创建链表算法:
#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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 销毁链表算法:
//销毁串算法
void destoryStr(LinkStrNode *&node){
	LinkStrNode *pre = node , *p = node->next;
	
	while(p!=NULL){
		free(pre);
		pre = p;
		p = pre->next; 
	}
	free(pre);
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 输出链表:
//输出链表
void DispStr(LinkStrNode *&node){
	LinkStrNode *r;
	r = node->next;
	while(r != NULL){
		printf("%3c",r->ch);
		r = r->next;
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 串的复制算法:
//串的复制操作
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;	
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 判断字符串是否相等算法:
//判断两个字符串是否相等
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("不相等");
	}
	
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 求串长度算法:
//求串的长度
int strLength(LinkStrNode *node){
	LinkStrNode *p = node->next;
	int len = 0;
	while(p!=NULL){
		len++;
		p = p->next;
	}
	return len;
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 连接串算法:
//连接串
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;	
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 结果展示如下:

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/670435
推荐阅读
相关标签
  

闽ICP备14008679号