자료구조 | linked list

Yunny.Log ·2021년 11월 13일
post-thumbnail
#include <stdio.h>
#include <stdlib.h>
#define IS_FULL(x) !x
typedef struct linkNode *node_pointer;
struct linkNode {
	int data;
	node_pointer link;
};
void attach(int inputnum, node_pointer *a_rear);
void print(node_pointer a);
void main(){
	int i,len, num;
	int inputnum;
	node_pointer a, a_rear;
	a=(node_pointer)malloc(sizeof(struct linkNode));
	a_rear=a;
	fprintf(stdout,"num:");
	fscanf(stdin, "%d", &len);
	//fscanf(stdin, "%s\n",arr);
	for(i=0;i<len;i++){
		fprintf(stdout,"inputnum:");
		fscanf(stdin, "%d", &inputnum);
		attach(inputnum,&a_rear);
		//print(a_rear); => a_rear에 차근차근 잘 저장됨  
	}
	//attatch 과정 마무리 되면 a_rear이 이제 맨 앞의 a 가리키게 해야 함  
	a_rear->link=a;
	//printf("%d", a_rear->data);//a_rear이 가리키는 data는 5로 확실  
	//printf("%d", a->link->data);//a는 비어있고 a+1(1) a+2(2) a+3(3) a+4(4) a+5(=a_rear=5) 
	//print(a);
	print(a);
	//fprintf(stdout,"movenum:");
	//fscanf(stdin, "%d", &num);
	//print(a);
}
//fprintf(stdout,"%s\n", cpycpy);

void attach(int inputnum, node_pointer *a_rear) {
  node_pointer temp;
  temp = (node_pointer)malloc(sizeof(struct linkNode));
  if(IS_FULL(temp)) {
    fprintf(stderr, "full\n");
    exit(1);
  }
  temp->data = inputnum;
  //temp->link = (*a_rear)->link;
  (*a_rear)->link = temp;
  *a_rear = temp;
}
void print(node_pointer a){
	node_pointer temp=a->link;//temp라는 아이는 처음 노드인 a랑 같음  
	//fprintf(stdout, "%d/", (a->data));
	//이제 temp는 a에서 시작해서 하나하나 늘려가면서 출력해줄거임 
	//언제까지? => a_rear까지 프린트하고 그 다음인 a 만나기 직전까지  
	while(temp!=a){
		fprintf(stdout, "%d ",temp->data);
		temp=temp->link;
	}
}

0개의 댓글