#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void print_link(list_pointer);
typedef struct list *list_pointer;
struct list
{
char data;
list_pointer next;
};
list_pointer header1, header2;
list_pointer insert_link()
{
list_pointer head, tail, temp;
char ch;
ch=getche();
temp=(list_pointer)malloc(sizeof(struct list));
temp->next=NULL;
temp->data=ch;
head=tail=temp;
while( ch!='\r'){
ch=getche();
temp=(list_pointer)malloc(sizeof(struct list));
temp->next=NULL;
if(ch!='\r'){
tail->next=temp;
tail=temp;
tail->data=ch;
}
else free(temp);
}
return (head);
}
void compare_link (list_pointer source, list_pointer target)
{
int length=0, t_length=0, cnt=1;
list_pointer s_head, s_move, t_move;
s_move=s_head=source;
t_move=target;
while(t_move !=NULL && s_move != NULL){
if(s_move->data==t_move->data)
{
length++;
s_move=s_move->next;
t_move=t_move->next;
}
else
{
t_move=target;
s_head=s_head->next;
s_move=s_head;
length=0;
cnt++;
}
}
t_move=target;
while(t_move != NULL){
t_length++;
t_move=t_move->next;
}
print_link(target);
if(length==t_length) printf("은 다음 문자열에 포함됩니다.");
else printf("은 다음 문자열에 포함되지 않습니다.");
print_link(source);
if(length==t_length) printf("\n원본내에 포함문자열의 시작위치는 %d번째 입니다.\n",cnt);
}
void print_link(list_pointer head)
{
list_pointer p;
p=head;
while ( p!=NULL){
printf("%c",p->data);
p=p->next;
}
}
void main()
{
int i=0;
printf("\n-----------------------------\n");
while((i++)!=5)
{
printf("\n %2d LIST 1 : ",i);
header1=insert_link();
printf("\n %2d LIST 2 : ",i);
header2=insert_link();
printf("\n");
compare_link(header1,header2);
}
printf("\n\n--------------------------------\n");
getch();
}
'프로그래머의 길 > 알고리즘' 카테고리의 다른 글
이중 연결 리스트로 구현한 텍스트 뷰어 (2) | 2007.03.28 |
---|---|
이중 연결 리스트 (0) | 2007.03.28 |
연결 리스트 관련 문자열 중복 삭제 프로그램 (0) | 2007.03.27 |
연결 리스트 (0) | 2007.03.27 |
heap 정렬 (0) | 2007.03.13 |