C 언어 링크 흔 한 용법
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
struct node
{
int data; int key;
struct node * next;
};
struct node * head = NULL;
struct node * current = NULL;
//display the list
void printList()
{
struct node * ptr = head;
printf("
[ ");
//start from the beginning
while (ptr != NULL)
{
printf("(%d,%d) ", ptr->key, ptr->data);
ptr = ptr->next;
}
printf(" ]");
}
//insert link at the first location
void insertFirst(int key, int data)
{
//create a link
struct node * link = (struct node*) malloc(sizeof(struct node));
link->key = key;
link->data = data;
//point it to old first node
link->next = head;
//point first to new first node
head = link;
}
//delete first item
struct node* deleteFirst()
{
//save reference to first link
struct node * tempLink = head;
//mark next to first link as first
head = head->next;
//return the deleted link
return tempLink;
}
//is list empty
bool isEmpty()
{
return head == NULL;
}
int length()
{
int length = 0;
struct node * current;
for (current = head; current != NULL; current = current->next)
{
length++;
}
return length;
}
//find a link with given key
struct node* find(int key) {
//start from the first link
struct node* current = head;
//if list is em pty
if (head == NULL)
{
return NULL;
}
//navigate through list
while (current->key != key) {
//if it is last node
if (current->next == NULL) {
return NULL;
}
else {
//go to next link
current = current->next;
}
}
//if data found, return the current Link
return current;
}
//delete a link with given key
struct node* delete(int key) {
//start from the first link
struct node* current = head;
struct node* previous = NULL;
//if list is em pty
if (head == NULL) {
return NULL;
}
//navigate through list
while (current->key != key) {
//if it is last node
if (current->next == NULL) {
return NULL;
}
else {
//store reference to current link
previous = current;
//move to next link
current = current->next;
}
}
//found a match, update the link
if (current == head) {
//change first to point to next link
head = head->next;
}
else {
//bypass the current link
previous->next = current->next;
}
return current;
}
void sort() {
int i, j, k, tempKey, tempData;
struct node * current;
struct node * next;
int size = length();
k = size;
for (i = 0; i < size - 1; i++, k--) {
current = head;
next = head->next;
for (j = 1; j < k; j++) {
if (current->data > next->data) {
tempData = current->data;
current->data = next->data;
next->data = tempData;
tempKey = current->key;
current->key = next->key;
next->key = tempKey;
}
current = current->next;
next = next->next;
}
}
}
void reverse(struct node* * head_ref) {
struct node* prev = NULL;
struct node* current = *head_ref;
struct node* next;
while (current != NULL) {
next = current->next;
current->next = prev;
prev = current;
current = next;
}
*head_ref = prev;
}
int main() {
insertFirst(1, 10);
insertFirst(2, 20);
insertFirst(3, 30);
insertFirst(4, 1);
insertFirst(5, 40);
insertFirst(6, 56);
printf("Original List: ");
//print list
printList();
while (!isEmpty()) {
struct node * temp = deleteFirst();
printf("
Deleted value:");
printf("(%d,%d) ", temp->key, temp->data);
}
printf("
List after deleting all item s: ");
printList();
insertFirst(1, 10);
insertFirst(2, 20);
insertFirst(3, 30);
insertFirst(4, 1);
insertFirst(5, 40);
insertFirst(6, 56);
printf("
Restored List: ");
printList();
printf("
");
struct node * foundLink = find(4);
if (foundLink != NULL) {
printf("Elem ent found: ");
printf("(%d,%d) ", foundLink->key, foundLink->data);
printf("
");
}
else {
printf("Elem ent not found.");
}
delete(4);
printf("List after deleting an item : ");
printList();
printf("
");
foundLink = find(4);
if (foundLink != NULL) {
printf("Elem ent found: ");
printf("(%d,%d) ", foundLink->key, foundLink->data);
printf("
");
}
else {
printf("Elem ent not found.");
}
printf("
");
sort();
printf("List after sorting the data: "); printList();
reverse(&head);
printf("
List after reversing the data: "); printList();
return 0;
}
위 프로그램 을 컴 파일 하고 실행 한 결 과 는 다음 과 같 습 니 다.
Original List:
[ (6,56) (5,40) (4,1) (3,30) (2,20) (1,10) ] Deleted value:(6,56)
Deleted value:(5,40)
Deleted value:(4,1)
Deleted value:(3,30)
Deleted value:(2,20)
Deleted value:(1,10)
List after deleting all items:
[ ]
Restored List:
[ (6,56) (5,40) (4,1) (3,30) (2,20) (1,10) ]
Element found: (4,1)
List after deleting an item:
[ (6,56) (5,40) (3,30) (2,20) (1,10) ]
Element not found.
List after sorting the data:
[ (1,10) (2,20) (3,30) (5,40) (6,56) ]
List after reversing the data:
[ (6,56) (5,40) (3,30) (2,20) (1,10) ]
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
하나의 단일 체인 테이블의 순환과 귀속 실현을 반전시키다텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.