본문 바로가기
프로그래머의 길/알고리즘

연결 리스트 관련 문자열 포함 프로그램

by 제이콥케이 2007. 3. 28.
반응형

#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();
}

반응형