分享

链串的各种基本运算算法(1)

 印度阿三17 2020-06-19

因为插入,删除,替换操作代码比较长,所以放在下一篇

说明链串节点类型

typedef struct Node {
	char data;
	struct Node* next;
}linkstrnode;

字符串赋值为链串

void strassign(linkstrnode*& L, char str[]) {
	linkstrnode* r, * s;
	L = (linkstrnode*)malloc(sizeof(linkstrnode));
	r = L;
	for (int i = 0; str[i] != '\n'; i  ) {
		s = (linkstrnode*)malloc(sizeof(linkstrnode));
		s->data[i] = str[i];
		r->next = s;
		r = s;
	}
	r->next = NULL;
}

销毁串

void destoryste(linkstrnode*& L) {
	linkstrnode* r, * s;
	r = L;
	s = L->next;
	while ( s != NULL ) {
		free(r);
		r = s;
		s = r->next;
	}
	free(r);
}

复制串

void strcopy(linkstrnode*& t, linkstrnode* s) {
	linkstrnode* p = s->next, * q, * r;
	t = (linkstrnode*)malloc(sizeof(linkstrnode));
	r = t;
	while ( p != NULL ) {
		q = (linkstrnode*)malloc(sizeof(linkstrnode));
		q->data = p->data;
		r->next = q;
		r = q;
		p = p->next;
	}
	r->next = NULL;
}

判断串相等

void strequal(linkstrnode* s, linkstrnode* t) {
	linkstrnode* p = s->next, * q = t->next;
	while ( p != NULL && q != NULL && p->data == q->data ) {
		p = p->next;
		q = q->next;
	}
	if ( p == NULL && q == NULL ) {
		printf("两串相等\n");
	}
	else {
		printf("两串不等\n");
	}
}

求串长

int strlength(linkstrnode* s) {
	int i = 0;
	linkstrnode* p = s->next;
	while (p != NULL) {
		i  ;
		p = p->next;
	}
	return i;
}

串连接

linkstrnode* concat(linkstrnode* s, linkstrnode* t) {
	linkstrnode* str, * p = s->next, * q, * r;
	str = (linkstrnode*)malloc(sizeof(linkstrnode));
	r = str;
	while (p != NULL) {
		q = (linkstrnode*)malloc(sizeof(linkstrnode));
		q->data = p->data;
		r->next = q;
		r = q;
		p = p->next;
	}
	p = t->next;
	while (p!=NULL) {
		q = (linkstrnode*)malloc(sizeof(linkstrnode));
		q->data = p->data;
		r->next = q;
		r = q;
		p = p->next;
	}
	r->next = NULL;
	return str;
}

求子串

linkstrnode* substr(linkstrnode* s, int i, int j) {
	int k;
	linkstrnode* str, * p = s->next, * q, * r;
	str = (linkstrnode*)malloc(sizeof(linkstrnode));
	str->next = NULL;
	r = str;
	if ( i <= 0 || i > strlength(s) || j < 0 || i   k - 1 > strlength(s)) {
		return str;
	}
	for ( k = 0; k < i - 1; k  ) {
		p = p->next;
	}
	for ( k = 0; k <= j; k  ) {
		q = (linkstrnode*)malloc(sizeof(linkstrnode));
		q->data = p->data;
		r->next = q;
		r = q;
		p = p->next;
	}
	r->next = NULL;
	return str;
}
来源:https://www./content-1-713201.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多