home > working > C# > Q & A

 


Name  
   박성호 
Subject  
   linked list 구형하는 건데요..고수님들 수정 부탁드립니다.
제가요 너무 너무 초보라서요..
일주일 밤낮으로 고민 고민 이책 저책 찾아보고
하는데까지는 했는데요..
더이상 안되요..멀 어떻게 해야 하는 건지 모르겠습니다..
부탁 드립니다..도와주세요..고수님들

1.링크드 리스트를 이용하여 아이템의 추가 삭제 위치 이동 또는 삽입을 할 수 있다.
2.현재 가지고 있는 아이템을 볼수 있다.(타입과 무게 출력)
3.아이템 획득 시에 전체 아이템의 무게가 100을 넘을 수 없다.
4.아이템을 무게 별로 오름차순으로 정렬 할 수 있다.
5.타입과 무게가 같은 아이템을 둘 이상 획득할 수 있다.
6.타입이 같더라도 무게가 다를 수 있고 반대도 가능하다.
7.아이템은 타입(이름)과 무게 속성을 갖는다.
8.아이템의 타입(정수)은 00 ~ 99까지의 수를 붙여 각자 만든다.
9.아이템의 무게는 각자 정한다.

제가 만든 부분입니다..아마도 많은 수정이 필요 할듯 합니다.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


typedef enum { FALSE, TRUE } blean;

typedef struct list  // 노드를 정의합니다.
{
int item; //아이템 값을 정수로 지정해 줌니다
int weight; // 아이템 무게값을 정수로 지정해 줍니다.
struct list * next ; // 링크 포인터
} LinkedList;

int showmenu();
bool checkmenu(int choice);
void show();
void additem();
void deleteitem();
void arrayitem();

LinkedList * head, * tail; // 리스트의 머리와 꼬리를 선언해 줍니다.

void main()
{
int choice; //


while( (choice = showmenu()) != 0 )  // showmenu()함수.
{
switch(choice)
{ // 각 선택에 맞는 함수를 호출한겁니다.
case 1 : show(); break; // 리스트를 보여줍니다
case 2 : additem(); break; // 리스트에 아이템추가
case 3 : deleteitem(); break; // 삭제
case 4 : arrayitem(); break; //오름차순 정열
}
}

printf("Good bye~ \n"); // 인사하네요~ 안녕~
}

int showmenu()
{ // 메뉴를 화면에 보여주는 함수네요.
int choice; // 선택을 저장하는거구요.

do
{
printf("1. Show \n");
printf("2. Add \n");
printf("3. Delete \n");
printf("4. array \n");
printf("0. exit \n");
printf("your choice : "); // 선택가능한것들을 나열합니다
scanf("%d", &choice);  // 선택을 정수로 입력받고요.
} while( !checkmenu(choice) ); // 올바른 선택이 아니면 되돌아가서 반복.

return choice; // 올바른 선택이면 루프를 빠져나와 선택한수를 반환.
}


bool checkmenu(int choice)   // 선택이 올바른지 아닌지를 판단합니다.
{
if( choice < 0 || choice > 3 )   // 유효한 메뉴인지 검사합니다.

{
  printf("This number is Wrong Menu!! \n");
return FALSE;
}
return TRUE;
}

void show()
{
LinkedList * temp; // 노드를 가르키는 임시 포인터변수.
if( head == NULL )  // head가 0L이면 리스트가 비었다는 것입니다.
{
printf("It's Empty! \n");  //노드가 전부 비었다는 것입니다.
}
else
{
for(temp = head; temp != NULL; temp = temp->next)  // temp를 이용해서 리스트를 탐색하여 출력합니다.
{
printf("Data %2d : %2d \n", temp->item, temp->weight);
}
}
}

void additem()  // 아이템 추가 정의
{
if( head == NULL )  // head가 0이면 비어있다는 것으로 head는 새로 추가될 노드를 가르킵니다.
{
head = (LinkedList *)malloc(sizeof(LinkedList)); // 노드 하나를 추가할 메모리 공간을 확보합니다.

printf("Insert weight : ");
scanf("%d", &head->weight); // 추가할 데이터 입력

head->item = 2125700; // 번호를 넣어 주었습니다.
head->next = 0;  // 다음노드는 없으므로 0입니다.

tail = head; // 노드가 하나뿐이니 이 노드는 머리이자 꼬리입니다.
}
else  // 이미 삽입된 노드가 존재한다면
{
LinkedList * temp;
temp = (LinkedList *)malloc(sizeof(LinkedList));

printf("Insert weight : ");
scanf("%d", &temp->weight);

temp->item = tail->item+1;  // 아이템에 저장되어 있던 기존 값에 1을 더해줍니다.
temp->next = 0;  // 새로 삽입된 노드는 끝노드이므로 다음노드가 없습니다.
tail->next = temp; // 꼬리노드는 새로 삽입된 노드를 가르키게 됩니다.
tail = temp; // 새로 삽입된 노드가 꼬리노드가 됩니다.

}
}

void deleteitem()  //아이템 삭제 정의
{
LinkedList * temp;

if( head == NULL )  // 리스트에원소가 없으므로 삭제할 대상이 없습니다.
{
printf("It's Empty! \n");
}
else
{
printf("Delete weight %d : %d \n", head->item, head->weight);

temp = head;
head = head->next; // 기존에 있던 노드 다음노드가 머리가 됩니다.

free(temp); // 기존에 있던 노드가 할당된 메모리는 프리됩니다.
//메모리공간이 노는 일이 없게 하기 위해서는 반드시 지정해 주어야 하는 값입니다.
}
}




void arrayitem()
{
int weight[10] = {13,14,15,11,27,29,10,16,24,19};
int i,j;
int tmp;
for(i=0;i<10;i++){
  for(j=i;j<10;j++){
   if(weight[j] > weight[j+1]){
    tmp = weight[j];
    weight[j] = weight[j+1];
    weight[j+1] = tmp;
   }
  }
}
for(i = 0;i < 10; i++)
{printf("%d ", weight[i]);
}
}



제가 짜 놓고도 참 한심합니다..고수님들 부탁 드립니다.

Prev
   sgen.exe 가 뭔가요?

페퍼민트
Next
   프로그램 짜는 건데..좀 도와 주세요.. [1]

궁금해


Copyright 1999-2018 Zeroboard / skin by JiYoo / edit by Mystous