2012计算机考研真题:用链表保存单词,找两个单词的相同后缀
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
while(list_first_temp && list_second_temp){
if(list_first_temp == list_second_temp) return list_first_temp->data;
list_first_temp = list_first_temp->next; list_second_temp = list_second_temp->next; }
#include <stdio.h> #include <stdlib.h> #define LEN sizeof(struct LNode) struct LNode {
char data; struct LNode *next; }; struct LNode * Create(char *); int GetLength(struct LNode *); void Print(struct LNode *); int IsAlpha(char); char GetFirstCommonChar(struct LNode *,struct LNode *); struct LNode * Create(char * str){ struct LNode *head, *temp, *new_node; int i; head = (struct LNode *)malloc(LEN); temp = head;
return -1; } int GetLength(struct LNode * list){
int sum = 0; struct LNode * temp = list->next; while(temp != NULL){
sum++; temp = temp->next;
}
2
return sum; } int IsAlpha(char c){
Байду номын сангаас
list_second_temp = list_second; for(i = 0; i < 3; i++)
list_second_temp = list_second_temp->next; list_first_temp->next = list_second_temp;
first_common_char = GetFirstCommonChar(list_first,list_second); if(IsAlpha(first_common_char))
return c>='a' && c<='z' || c>='A' && c<='Z' ? 1 : 0; }
main(){
int i; char first_common_char;//保存第一公共字符 char str_first[] = "loading";//第一个字符串 char str_second[] = "being"; //第二个字符串 struct LNode *list_first;//第一个字符串头结点 struct LNode *list_second;//第二个字符串头结点 struct LNode *list_first_temp;//第一个字符串临时结点 struct LNode *list_second_temp;//第二个字符串临时结点 list_first = Create(str_first);//创建链表first list_second = Create(str_second); //创建链表second
printf("两个单词的相同后缀的第一个字符是:%c", first_common_char); else
printf("两个单词没有相同后缀"); printf("\n"); }
时间复杂度O(n)
3
人在江湖
记录那些有趣的事儿
2012计算机考研真题:用链表保存单词,找两个单词的相同后缀
分类: 算法之趣 2012-11-20 12:54 95人阅读 评论(0) 收藏 举报
看到这题一个节点存了一个单词,我首先想到trie树了,仔细一看还真就是只有父节点的trie树,区别是trie前缀 相同,这题后缀相同。 再次看这个结构想到了《编程之美》判断链表相交问题,这个题不就是告诉你了链表相交求第一个公共节点嘛,然 后就code下:
/*把链表first 前4个节点load链接到链表senc第3个节点i上*/ list_first_temp = list_first; for(i = 0; i < 4; i++)
list_first_temp = list_first_temp->next; free(list_first_temp->next); list_first_temp->next = NULL;
void Print(struct LNode *node){
struct LNode * temp = node->next;
if(node == NULL) return;
while(temp != NULL){
printf("%c ", temp->data); temp = temp->next; } printf("\n");
if(first_len > second_len){ for(i = 0; i < first_len-second_len; i++) list_first_temp = list_first_temp->next; }
else if(first_len < second_len){ for(i = 0; i < second_len-first_len; i++) list_second_temp = list_second_temp->next;
1
for(i = 0; i < strlen(str); i++){ new_node = (struct LNode *) malloc(LEN); new_node->data = str[i]; temp->next = new_node; temp = new_node;
} temp->next = NULL; return head; }
} char GetFirstCommonChar(struct LNode *list_first,struct LNode *list_second){
int i; int first_len = GetLength(list_first); int second_len = GetLength(list_second); struct LNode *list_first_temp; struct LNode *list_second_temp; list_first_temp = list_first; list_second_temp = list_second;
while(list_first_temp && list_second_temp){
if(list_first_temp == list_second_temp) return list_first_temp->data;
list_first_temp = list_first_temp->next; list_second_temp = list_second_temp->next; }
#include <stdio.h> #include <stdlib.h> #define LEN sizeof(struct LNode) struct LNode {
char data; struct LNode *next; }; struct LNode * Create(char *); int GetLength(struct LNode *); void Print(struct LNode *); int IsAlpha(char); char GetFirstCommonChar(struct LNode *,struct LNode *); struct LNode * Create(char * str){ struct LNode *head, *temp, *new_node; int i; head = (struct LNode *)malloc(LEN); temp = head;
return -1; } int GetLength(struct LNode * list){
int sum = 0; struct LNode * temp = list->next; while(temp != NULL){
sum++; temp = temp->next;
}
2
return sum; } int IsAlpha(char c){
Байду номын сангаас
list_second_temp = list_second; for(i = 0; i < 3; i++)
list_second_temp = list_second_temp->next; list_first_temp->next = list_second_temp;
first_common_char = GetFirstCommonChar(list_first,list_second); if(IsAlpha(first_common_char))
return c>='a' && c<='z' || c>='A' && c<='Z' ? 1 : 0; }
main(){
int i; char first_common_char;//保存第一公共字符 char str_first[] = "loading";//第一个字符串 char str_second[] = "being"; //第二个字符串 struct LNode *list_first;//第一个字符串头结点 struct LNode *list_second;//第二个字符串头结点 struct LNode *list_first_temp;//第一个字符串临时结点 struct LNode *list_second_temp;//第二个字符串临时结点 list_first = Create(str_first);//创建链表first list_second = Create(str_second); //创建链表second
printf("两个单词的相同后缀的第一个字符是:%c", first_common_char); else
printf("两个单词没有相同后缀"); printf("\n"); }
时间复杂度O(n)
3
人在江湖
记录那些有趣的事儿
2012计算机考研真题:用链表保存单词,找两个单词的相同后缀
分类: 算法之趣 2012-11-20 12:54 95人阅读 评论(0) 收藏 举报
看到这题一个节点存了一个单词,我首先想到trie树了,仔细一看还真就是只有父节点的trie树,区别是trie前缀 相同,这题后缀相同。 再次看这个结构想到了《编程之美》判断链表相交问题,这个题不就是告诉你了链表相交求第一个公共节点嘛,然 后就code下:
/*把链表first 前4个节点load链接到链表senc第3个节点i上*/ list_first_temp = list_first; for(i = 0; i < 4; i++)
list_first_temp = list_first_temp->next; free(list_first_temp->next); list_first_temp->next = NULL;
void Print(struct LNode *node){
struct LNode * temp = node->next;
if(node == NULL) return;
while(temp != NULL){
printf("%c ", temp->data); temp = temp->next; } printf("\n");
if(first_len > second_len){ for(i = 0; i < first_len-second_len; i++) list_first_temp = list_first_temp->next; }
else if(first_len < second_len){ for(i = 0; i < second_len-first_len; i++) list_second_temp = list_second_temp->next;
1
for(i = 0; i < strlen(str); i++){ new_node = (struct LNode *) malloc(LEN); new_node->data = str[i]; temp->next = new_node; temp = new_node;
} temp->next = NULL; return head; }
} char GetFirstCommonChar(struct LNode *list_first,struct LNode *list_second){
int i; int first_len = GetLength(list_first); int second_len = GetLength(list_second); struct LNode *list_first_temp; struct LNode *list_second_temp; list_first_temp = list_first; list_second_temp = list_second;