#include "LINKEDLIST.H"


void node_print1(node * head)
{
  while(0!=head)
  {
    
    printf("%c->", head->data);
    head=head->next;
  }
  printf("\n");
}
void node_print(node * head)
{
  for(head; 0!=head; head=head->next)
  {
    printf("%c->", head->data);
  }
  printf("\n");

}
void node_free(node * head)
{
  node * temp;
  for(temp=head; 0!=head; temp=temp->next)
  {
    head = head->next;
    free(temp);
    printf("malloc was deleted \n");
  }

}
node* node_insert(node * head, char cdata)
{
  node * stpnew;
  node * stpfront;
  node * stprear;
  stpfront = head;
  stprear = head; 
  stpnew  = malloc(sizeof(node));
  stpnew->data = cdata;
  stpnew->next = 0;

  while(0!=stprear) //serching
  {
     if(stprear->data > stpnew->data) // 삽입할위치판단 
     {
        break;
     }
    stpfront = stprear;
    stprear = stprear->next; 
    
  }
  if(head!=stprear)
  {
    stpnew->next =stprear;
    stpfront->next =stpnew;
  }
  else
  {
    stpnew->next = head;
    head = stpnew;
  }
  return head;
}
node* node_del(node * head, char cdata)
{

  node * stpfront;
  node * stprear;
  stpfront = head;
  stprear = head; 


  while(0!=stprear) //serching
  {
     if(stprear->data == cdata) // 삽입할위치판단 
     {
        break;
     }
    stpfront = stprear;
    stprear = stprear->next; 
    
  }
  if0== stprear)
  {
      return head;
  }//없을때 
  else if(head !=stprear)
  {
    stpfront->next= stprear->next;
  }//중간 삭제
  else
  {
    head = head->next;
  }//앞삭제 
  free(stprear);
  
  return head;
}


'C언어' 카테고리의 다른 글

20140428 USART통신  (0) 2014.04.28
20140425 파일열고닫기  (0) 2014.04.25
20140421 링크드리스트  (0) 2014.04.21
20140417 링크드리스트  (0) 2014.04.17
20140406 링크드리스트 분할컴파일  (0) 2014.04.16
by 날라차숑 2014. 4. 22. 17:47

 #include <stdio.h>

#include "smart.h"

void inst_clear(void);
void inst_return(void);
void inst_entry(void);
void inst_display(void);
void inst_cursor(void);
void inst_function(void);
void data_a(void);
void lcd_init(void);

int main(void)
{

  lcd_init();
  data_a();
  data_a();
  data_a();
  data_a();
  data_a();
  

  
  while(1);
  {
  
  }        
  return 0;
}

void data_a(void)
{
  volatile unsigned int uicnt;
  DDRA = (1<<PIN_RS)|(1<<PIN_RW)|(1<<PIN_E);
  DDRC = 0xFF;
  PORTA = (0<<PIN_E);

  PORTA=(1<<PIN_RS)|(0<<PIN_RW)|(0<<PIN_E);
  DELAY(10000);
  PORTA=PORTA|(1<<PIN_E);
  DELAY(500);
  PORTC='A';
  DELAY(10000);
  PORTA=PORTA&~(1<<PIN_E);
  DELAY(500);
  
}
void lcd_init(void)
{
  volatile unsigned int uicnt;
  DELAY(500);
//  inst_function();
  lcd_inst(INST_FUNCTION);
//  inst_entry();
  lcd_inst(INST_ENTRY);
//  inst_cursor();
  lcd_inst(INST_CURSOR);
//  inst_display();
  lcd_inst(INST_DISPLAY);
//    inst_clear();
  lcd_inst(INST_CLEAR);
//  inst_return();
  lcd_inst(INST_RETURN);
}


문자열을 출력하는 함수를 선언하자
void
 lcd_str(const char * cstring)

{


  while(0!=*cstring)
    {
      lcd_data(*cstring);
      ++cstring;
    }
}


숫자를 출력하는 함수를 선언하자
void
 lcd_num(unsigned char ucnum)
{
  static unsigned char ucbuffer[] = "123";
  ucbuffer[0]='0'+(ucnum/100);        //백단위 자리수 구하기
  ucbuffer[1]='0'+((ucnum%100)/10);   //십단위 자리수 구하기
  ucbuffer[2]='0'+(((ucnum%100)%10)); //일단위 자리수 구하기
  lcd_str(ucbuffer);
}


'디지털회로' 카테고리의 다른 글

20140425  (0) 2014.04.25
20140424 USART  (0) 2014.04.24
20140421 LCD2  (0) 2014.04.21
20140417 LCD  (0) 2014.04.17
20140409 WinAVR설치  (0) 2014.04.09
by 날라차숑 2014. 4. 22. 10:27

main.c

 #include "LINKEDLIST.H"


int main()
{
  node * head = 0;
  head = malloc(sizeof(node));
  head->data = 'b';
  head->next = malloc(sizeof(node));
  head->next->data = 'd';
  head->next->next = 0;

  node_print(head);
  head = node_insert(head, 'c');
  head = node_insert(head, 'e');
  node_print(head);

  node_free(head);  
  return 0;
}

linkedlist.c

 #include "LINKEDLIST.H"


void node_print1(node * head)
{
  while(0!=head)
  {
    
    printf("%c->", head->data);
    head=head->next;
  }
  printf("\n");
}
void node_print(node * head)
{
  for(head; 0!=head; head=head->next)
  {
    printf("%c->", head->data);
  }
  printf("\n");

}
void node_free(node * head)
{
  node * temp;
  for(temp=head; 0!=head; temp=temp->next)
  {
    head = head->next;
    free(temp);
    printf("malloc was deleted \n");
  }

}
node* node_insert(node * head, char cdata)
{
  node * stpnew;
  node * stpfront;
  node * stprear; //변수선언
  stpfront = head;
  stprear = head; 
  stpnew  = malloc(sizeof(node));
  stpnew->data = cdata;
  stpnew->next = 0;

  while(0!=stprear) //stp가 들어가기 위한 위치를 찾아라.
  {

      첫번째 포문 아래의 stprear의 데이터는 b이다. stpnew의 데이터는 C이다

          if실행이 안된다.

     두번째 포문 stprear의 data는 d 참 반복문을 빠져나온다.
     if(stprear->data > stpnew->data) // 삽입할위치판단 
     {
        break;
     }
    stpfront = stprear; stprear가 가리키는 곳을 stpfront도 가리킨다.

    stprear = stprear->next; 그다음 stprear->next 즉 d를 가리킨다.
    
  }
  stpnew->next =stprear;  stprear의 주소를 stpnew->next에 넣어준다.
  stpfront->next =stpnew; stpfont->next에 넣어주면 stpfront - stpnew - stprear 트로이카 탄생
  return head;
}


 


by 날라차숑 2014. 4. 21. 17:51