#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *link;
}NODE;
void print_all();
void insert_node(int n);
void delete_node(int n);
NODE *head = NULL;
main()
{
insert_node(4);
insert_node(3);
insert_node(1);
insert_node(5);
insert_node(2);
print_all();
puts("2삭제");
delete_node(2);
print_all();
}
void print_all() {
NODE *p = head;
while(p != NULL) {
printf("%d -> ", p->data);
p = p->link;
}
printf("NULL\n");
}
void insert_node(int n) {
NODE *p = head;
NODE *node = (NODE*)malloc(sizeof(NODE));
node->data = n;
node->link = NULL;
if(head == NULL)
head = node;
else if(p->data > node->data) {
node->link = p;
head = node;
}
else {
while(p->link != NULL && p->link->data < node->data)
p = p->link;
node->link = p->link;
p->link = node;
}
}
void delete_node(int n) {
NODE *p = head;
NODE *temp = NULL;
if(head == NULL) {
puts("빈 리스트입니다.");
return;
}
else if(p->data == n) {
temp = p;
head = p->link;
free(temp);
return;
}
else {
while(p->link != NULL) {
if(p->link->data == n) {
temp = p->link;
p->link = p->link->link;
free(temp);
return;
}
p = p->link;
}
}
}
/*단일연결리스트*/
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *link;
}NODE;
void insert_node(NODE **head, int n); // 삽입함수
void search_node(NODE *head, int n); // 검색함수
void print_node(NODE *head); // 출력함수
void delete_node(int n); // 삭제함수
int flag = 0, locate = 0; // 검색 시 해당 숫자 존재유무 및 위치저장변수
NODE* head = NULL;
main()
{
insert_node(&head, 4);
insert_node(&head, 2);
insert_node(&head, 3);
insert_node(&head, 1);
insert_node(&head, 5);
print_node(head);
search_node(head, 2);
if (flag == 1){
delete_node(2);
puts("삭제 후 출력 ");
print_node(head);
}
else
puts("존재하지 않는 숫자입니다.");
}
void print_node(NODE *head)
{
NODE *p = head;
while (p != NULL){
printf("%d -> ", p->data);
p = p->link;
}
printf("NULL\n");
}
void search_node(NODE *head, int n)
{
flag = 0;
locate = 0;
NODE *p = head;
while (p != NULL){
locate++;
if (p->data == n){
flag = 1;
break;
}
else
p = p->link;
}
}
void insert_node(NODE **head, int n) // 삽입 시 오름차순으로 정렬하여 삽입하는 함수
{
NODE *p = *head;
NODE *node = (NODE*)malloc(sizeof(NODE));
node->data = n;
node->link = NULL;
if (*head == NULL) // 헤드가 비었을때, 즉 빈리스트 일때
{
*head = node;
}
else if (p->data > node->data) // 빈리스트는 아니지만 헤드의 앞에 삽입하고 싶을때
{
node->link = p;
*head = node;
}
else // 빈리스트도 아니고 헤드의 앞에 삽입도 아닐 때
{
while (p->link != NULL && p->link->data < node->data)
p = p->link;
node->link = p->link;
p->link = node;
}
}
/*
void insert_node(NODE **head, int n) // 정렬하지않고 삽입
{
NODE *p = *head;
NODE *node = (NODE*)malloc(sizeof(NODE));
node->data = n;
node->link = NULL;
if (*head == NULL)
*head = node;
else{
while (p->link != NULL)
p = p->link;
node->link = p->link;
p->link = node;
}
}
*/
void delete_node(int n) // 삭제함수
{
NODE *temp = (NODE*)malloc(sizeof(NODE));
NODE *p = head;
if (head == NULL) // head가 비어있을경우
{
puts("빈 리스트입니다.");
return;
}
if (head->data == n)//삭제할 위치가 맨앞이라면
{
temp = head;//삭제할 위치 저장
head = head->link;//맨앞위치를 다음으로 변경
free(temp);//메모리 삭제
return;
}
while (p->link != NULL)
{ // NULL 이 아닐때까지
if (p->link->data == n)
{
temp = p->link; // 삭제할 위치 저장
p->link = p->link->link; // 삭제할 위치를 건너뛰어 연결
free(temp); // 메모리 삭제
return;
}
p = p->link; // 다음 노드로 이동
}
}
사용자에게 입력
#include <stdio.h>
#include <stdlib.h>
typedef struct Node{
int data;
struct Node *link;
}NODE;
void print_all(NODE *head);
void insert_node(NODE **head, int n);
void delete_node(int n);
NODE *head = NULL;
main()
{
int num = 0;
while(1){
printf("\n");
puts("--------------");
puts("1. 데이터 삽입");
puts("2. 데이터 삭제");
puts("3. 데이터 출력");
puts("--------------");
fputs("Enter : ", stdout);
scanf("%d", &num);
switch(num){
case 1:
fputs("Input Data : ", stdout);
scanf("%d", &num);
insert_node(&head, num);
break;
case 2:
fputs("Delete Data : ", stdout);
scanf("%d", &num);
delete_node(num);
break;
case 3:
print_all(head);
break;
default:
puts("잘못된 명령입니다.");
break;
}
}
}
void print_all(NODE *head)
{
NODE *p = head;
while(p != NULL){
printf("%d -> ", p->data);
p = p->link;
}
printf("NULL\n");
}
void insert_node(NODE **head, int n)
{
NODE *p = *head;
NODE *node = (NODE*)malloc(sizeof(NODE));
node->data = n;
node->link = NULL;
if(*head == NULL)
*head = node;
else if(p->data > node->data){
node->link = p;
*head = node;
}
else{
while(p->link != NULL && p->link->data < node->data)
p = p->link;
node->link = p->link;
p->link = node;
}
}
void delete_node(int n)
{
NODE *p = head;
NODE *temp = (NODE*)malloc(sizeof(NODE));
if(head == NULL){
puts("빈 리스트입니다.");
return;
}
if(head->data == n){
temp = head;
head = head->link;
free(temp);
return;
}
while(p->link != NULL){
if(p->link->data == n){
temp = p->link;
p->link = p->link->link;
free(temp);
return;
}
p = p->link;
}
}
/*연결리스트를 이용한 스택*/
#include <stdio.h>
#include <stdlib.h>
typedef struct Node{
int data;
struct Node *link;
}NODE;
void print_all(NODE *top);
void push(NODE **top, int n);
void pop();
NODE *top = NULL;
main()
{
push(&top, 1);
push(&top, 3);
push(&top, 4);
push(&top, 2);
push(&top, 5);
print_all(top);
printf("\nPOP 후\n\n");
pop();
print_all(top);
}
void print_all(NODE *top)
{
NODE *p = top;
printf("[Top] ");
while (p != NULL){
printf("%d -> ", p->data);
p = p->link;
}
printf("[Bottom]\n");
}
void push(NODE **top, int n)
{
NODE *p = *top;
NODE *node = (NODE*)malloc(sizeof(NODE));
node->data = n;
node->link = NULL;
if (*top == NULL){
*top = node;
}
else {
node->link = *top;
*top = node;
}
}
void pop()
{
if (top == NULL){
puts("스택이 비었습니다.");
return;
}
NODE *temp = NULL;
temp = top;
top = top->link;
free(temp);
}
/*연결리스트 스택2*/
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *link;
}NODE;
void print_all();
void pop();
void push(int n);
NODE *top = NULL;
main()
{
push(4);
push(2);
push(1);
push(5);
push(3);
print_all();
pop();
pop();
print_all();
}
void print_all()
{
NODE *p = top;
printf("[Top] ");
while (p != NULL) {
printf("%d -> ", p->data);
p = p->link;
}
printf("[Bottom]\n");
}
void push(int n)
{
NODE *p = top;
NODE *node = (NODE*)malloc(sizeof(NODE));
node->data = n;
node->link = NULL;
if (top == NULL) {
top = node;
}
else {
node->link = top;
top = node;
}
}
void pop()
{
NODE *p = top;
NODE *temp = NULL;
if (top == NULL) {
puts("빈 스택입니다.");
return;
}
else {
temp = top;
top = top->link;
free(temp);
return;
}
}
/*연결리스트 큐*/
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *link;
}NODE;
void print_all();
void dequeue();
void enqueue(int n);
NODE *front = NULL;
NODE *rear = NULL;
main()
{
enqueue(1);
enqueue(2);
enqueue(3);
print_all();
dequeue();
print_all();
dequeue();
print_all();
}
void print_all()
{
NODE *p = front;
printf("[Front] ");
while (p != NULL) {
printf("%d -> ", p->data);
p = p->link;
}
printf("[Rear]\n");
}
void enqueue(int n)
{
NODE *p = rear;
NODE *node = (NODE*)malloc(sizeof(NODE));
node->data = n;
node->link = NULL;
if (rear == NULL) {
front = node;
rear = node;
}
else {
rear->link = node;
rear = node;
}
}
void dequeue()
{
NODE *p = front;
NODE *temp = NULL;
if (front == NULL) {
puts("빈 큐입니다.");
return;
}
else {
temp = front;
front = front->link;
}
}