태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

티스토리 툴바



2009/05/12 16:35

연결리스트


<makefile>

CC=gcc

all:link_w2 struct_r
 @echo "컴파일 시작"
link_w2: link_w2.c eha.h
 $(CC) -o ex link_w2.c
struct_r: struct_r.c eha.h
 $(CC) -o struct struct_r.c
clean:
 @rm -rf link_w2 struct_r
hi:
 @echo "컴파일 종료"

<eha.h>

#ifndef _EHA_H_
#define _EHA_H_

#include<stdio.h>
#include<unistd.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>


#define M_Number 0x77ff2288

#pragma pack(1)

typedef int CSize_t;
typedef int MNum_t;
typedef struct _EHA
{
 int iNum;
 char cName[10];
 char cPhone[14];
 struct _EHA *next;  //4byte
} EHA; //32byte

typedef struct _EHAH
{
 CSize_t iCnt;
 MNum_t iMagic;
} EHAH;

#pragma pack()

#endif

<link_w2.c>

#include "eha.h"

void link_create(EHA **Head);
void link_create2(EHA **Head, EHA **Top);
void link_create3(EHA **Head);
EHA* link_create4(EHA *Head);

void link_free(EHA *Head);
void link_printf(EHA *Head);

int main()
{
 EHA *Head;  //struct _EHA *Head
 //EHA *Top=NULL;  //link_create2
 Head = 0;
 
 Head = link_create4(Head);
 Head = link_create4(Head);
 Head = link_create4(Head);
 link_printf(Head);
 link_free(Head);
  
 return 0;
}
//1,2,3 -> 3,2,1
void link_create(EHA **Head)
{
 EHA *Temp;
 Temp = (EHA*)malloc(sizeof(EHA));
 printf("번호를 입력하세요.\n");
 scanf("%d", &Temp->iNum);
 printf("이름을 입력하세요.\n");
 scanf("%s", &Temp->cName);
 printf("폰번호를 입력하세요.\n");
 scanf("%s", &Temp->cPhone);
 Temp->next = *Head;
 *Head = Temp;
}
//1,2,3 -> 1,2,3
void link_create2(EHA **Head, EHA **Top)
{
 EHA *Temp;
 Temp = (EHA*)malloc(sizeof(EHA));
 printf("번호를 입력하세요.\n");
 scanf("%d", &Temp->iNum);
 printf("이름을 입력하세요.\n");
 scanf("%s", &Temp->cName);
 printf("폰번호를 입력하세요.\n");
 scanf("%s", &Temp->cPhone);
 
 Temp->next = NULL;
 
 if(*Head == NULL){
  *Head = Temp;
 }
 else{
  (*Top)->next = Temp;
 }
 *Top = Temp;
}
//1,2,3 -> 1,2,3 함수내에서 구현
void link_create3(EHA **Head)
{
 EHA *Temp;
 EHA *Top;
 Temp = (EHA*)malloc(sizeof(EHA));
 printf("번호를 입력하세요.\n");
 scanf("%d", &Temp->iNum);
 printf("이름을 입력하세요.\n");
 scanf("%s", &Temp->cName);
 printf("폰번호를 입력하세요.\n");
 scanf("%s", &Temp->cPhone);
 
 Temp->next = NULL;
 if(*Head == NULL)
   *Head = Temp;
 else{
  for(Top = *Head; Top->next != NULL; Top=Top->next);
  Top->next = Temp;
 }
}

EHA* link_create4(EHA *Head)
{
 EHA *Temp;
 EHA *Top;
 Temp = (EHA*)malloc(sizeof(EHA));
 printf("번호를 입력하세요.\n");
 scanf("%d", &Temp->iNum);
 printf("이름을 입력하세요.\n");
 scanf("%s", &Temp->cName);
 printf("폰번호를 입력하세요.\n");
 scanf("%s", &Temp->cPhone);
 
 Temp->next = NULL;  
 if(Head == NULL){
  Head = Temp;
  return Head;
 }
 Top=Head;
 while(Top->next != 0)
  Top = Top->next;
 Top->next = Temp;
 
 return Head;
}

void link_free(EHA *Head){
 EHA *Temp;
 for(Temp = Head; NULL != Head; Temp = Head)
 {
  Head = Head->next; //이동
  free(Temp);  // 제거
 }
}

void link_printf(EHA *Head)
{  
 EHA *Temp;
 for(Temp=Head; Temp != NULL; Temp = Temp->next){
  printf("번호:%d\n", Temp->iNum);
  printf("이름:%s\n", Temp->cName);
  printf("폰번호:%s\n", Temp->cPhone);
 }
}

'시스템 프로그래밍 > Linux' 카테고리의 다른 글

도서관리 연결리스트  (0) 2009/05/15
연결리스트  (0) 2009/05/12
유용한 vi 명령어  (0) 2009/05/08
Linux 압축명령 tar 및 ftp 명령어  (0) 2009/05/08
VMware 브릿지모드 네트웍 설정  (0) 2009/04/29
Vmware Workstation v5.5.1  (0) 2009/04/27
Trackback 0 Comment 0