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) ]

좋은 웹페이지 즐겨찾기