求两个用链表存起来的单词的后缀
作者:互联网
前言
一次数据结构的作业,写完了不拿来发CSDN有点可惜。估计这个没多少人看,毕竟只是博主兴致来了的作品。也算是忙里偷闲了吧,现在已经期末了,希望我马原不会挂。
题目
设计思路
利用两个单词的长度差,先将长度大的链表指针往后移,使得之后的两链表长度一致,然后一一比较。当两个字符相等时就退出比较。
实现代码
//我直接写出了完整的实现代码,是可以运行的
//因为返回的位置是一个指针,不方便进行输出
//所以就直接将相同后缀输出了
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct Node {
char Data;
struct Node* Next;
}*node;
node CreateNode(char s[]) {//用单词s创建链表
node head = (node)malloc(sizeof(Node));
head->Next = NULL;
node q = head;
for (int i = 0; s[i]; i++) {
node p = (node)malloc(sizeof(Node));
p->Data = s[i];
q->Next = p;
p->Next = NULL;
q = p;
}
return head;
}
int length(node head) {//计算链表的长度
node p = head->Next;
int sum = 0;
while (p != NULL) sum++, p = p->Next;
return sum;
}
node postfix(node head1, node head2) {
node postion = NULL;
int s1 = length(head1), s2 = length(head2);
if (s1 == s2) {
node p = head1->Next, q = head2->Next;
while (p != NULL && q != NULL) {
if (p->Data == q->Data) return p;
p = p->Next, q = q->Next;
}
}
else if (s1 > s2) {
int a = s1 - s2;
node p = head1->Next, q = head2->Next;;
while (a--)p = p->Next;
while (p != NULL && q != NULL) {
if (p->Data == q->Data) return p;
p = p->Next, q = q->Next;
}
}
else {
int a = s2 - s1;
node q = head2->Next, p = head1->Next;
while (a--)q = q->Next;
while (p != NULL && q != NULL) {
if (p->Data == q->Data) return q;
p = p->Next, q = q->Next;
}
}
return postion;
}
void Print(node head, node postion) {//从位置postion开始输出链表
node p = head->Next;
while (p != postion)p = p->Next;
while (p != NULL)printf("%c", p->Data), p = p->Next;
printf("\n");
}
int main() {
char str1[1005], str2[1005];
while (~scanf("%s%s", str1, str2)) {
node head1 = CreateNode(str1);
node head2 = CreateNode(str2);
node postion = postfix(head1, head2);
printf("这两个单词的相同后缀为:");
if (strlen(str1) > strlen(str2))
Print(head1, postion);
else
Print(head2, postion);
printf("\n");
}
return 0;
}
运行结果
结语
其实博主感觉这个代码还是有bug的,毕竟只是一时的娱乐作品。比如如果两个单词中间由一个字母相等,之后就全部都不想等的,程序判断还是有相同后缀。嗯。。。。博主也懒得去实现那么多了,毕竟只是一个小作业,没太多时间。当然,有问题还是可以问的哦~
标签:node,单词,后缀,postion,Next,链表,while,NULL,Data 来源: https://blog.csdn.net/xiexieyuchen/article/details/122016821