/*
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
printf("학생의 수: ");
scanf("%d", &n);
int *p;
p = (int*)malloc(n*sizeof(int));
if(p == NULL)
{
printf("동적 메모리 할당 오류\n");
exit(1);
}
for(int i=0; i<n; i++)
{
printf("학생 #%d 성적:", i+1);
scanf("%d", &p[i]);
}
printf("=============");
for(int i=0; i<n; i++)
{
printf("\n학생 #%d 성적:", i+1);
printf("%d", p[i]);
}
printf("\n=============");
free(p); //동적 메모리 반납
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("정수 2개를 저장할 공간이 필요\n");
int *p;
p = (int *)malloc(2*sizeof(int));
p[0]=10;
p[1]=20;
printf("정수 3개를 저장할 공간으로 확장 \n");
p = (int *)realloc(p, 3*sizeof(int));
p[2]=30;
for(int i=0; i<3; i++)
{
printf("%d ", p[i]);
}
}
*/
#include <stdio.h>
#include <stdlib.h>
typedef int element;
typedef struct ListNode
{
element data;
struct ListNode *link; //자기참조구조체
}ListNode;
ListNode *insert_first(ListNode* head, element value)
{
ListNode *p = (ListNode *)malloc(sizeof(ListNode));
p->data = value;
p->link = head;
head = p;
return head;
}
ListNode *insert(ListNode *head, ListNode *pre, element value)
{
ListNode *p = (ListNode *)malloc(sizeof(ListNode));
p->data = value;
p->link = pre->link;
pre->link = p;
return head;
}
ListNode *delete_first(ListNode *head)
{
ListNode *removed;
if(head == NULL) return NULL;
//head = head->link;
removed = head;
head = removed->link;
free(removed);
return head;
}
ListNode *deleteN(ListNode *head, ListNode *pre)
{
ListNode *removed;
if(pre->link == NULL) return NULL; //삭제할 게 없는 경우
removed = pre->link;
pre->link = removed->link;
free(removed);
return head;
}
ListNode *search(ListNode *head, int x)
{
ListNode *p; //순회 포인터 선언
p=head; //head 위치에서 시작
while(p != NULL)
{
if(p->data == x) return p;
p = p->link;
}
return p; //실패할 경우 NULL 반환
}
void print_list(ListNode *head)
{
for(ListNode *p=head ; p!=NULL ; p=p->link)
printf("%d->", p->data);
printf("NULL \n");
}
int main(){
ListNode *head = NULL, *x;
for (int i = 0; i < 5; i++) {
head = insert_first(head, i); //head에 node 앞쪽에 삽입
print_list(head);
}
getchar();
x = search(head, 3); //리스트에서 3찾기
head = insert(head, x, 7); //노드 3 뒤에 7 추가
print_list(head); //리스트 출력
x = search(head, 3); //리스트에서 3찾기
head = deleteN(head, x); //노드 3 뒤의 노드(7) 삭제
print_list(head); //리스트 출력
for (int i = 0; i < 5; i++) {
head = delete_first(head); //head에서 node 삭제
print_list(head);
}
free(head);
}