C 언어 링크 전체 조작 데모
헤더 파일:link0505.h
/*
*/
#ifndef __LINK_0505
#define __LINK_0505
typedef struct node{
int num;
struct node* p_next;
}node;
typedef struct
{
node head,tail;
}link;
//
void link_init(link *);
//
void link_deinit(link *);
//
int link_empty(link *);
//
int link_full(link *);
//
int link_size(link *);
//
int link_add_head(link *, int );
//
int link_append(link *, int );
//
int link_insert(link *, int);
//
int link_remove_head(link *);
//
int link_remove_tail(link *);
//
int link_remove(link *, int );
//
int link_get_head(link *, int *);
//
int link_get_tail(link *, int *);
//
int link_get(link *, int *, int );
#endif
구현 코드:link0505.cpp
/*
*/
#include "stdlib.h"
#include "link_0505.h"
//
void link_init(link *p_link)
{
p_link->head.p_next = &(p_link->tail);
}
//
void link_deinit(link *p_link)
{
while(p_link->head.p_next != &(p_link->tail))
{
node *p_first = &(p_link->head);
node *p_mid = p_first->p_next;
node *p_last = p_mid->p_next;
p_first->p_next = p_last;
free(p_mid);
p_mid = NULL;
}
}
//
int link_empty(link *p_link)
{
return p_link->head.p_next == &(p_link->tail);
}
//
int link_full(link *p_link)
{
return 0;
}
//
int link_size(link *p_link)
{
int cnt = 0;
node *p_node = NULL;
for (p_node = &(p_link->head);p_node != &(p_link->tail);p_node = p_node->p_next)
{
node *p_first = p_node;
node *p_mid = p_first->p_next;
node *p_last = p_mid->p_next;
if (p_mid != &(p_link->tail))
{
cnt++;
}
}
return cnt;
}
//
int link_add_head(link *p_link, int num)
{
node *p_temp = (node *)malloc(sizeof(node));
if (!p_temp)
{
return 0;
}
p_temp->num = num;
node *p_first = &(p_link->head);
node *p_mid = p_first->p_next;
node *p_last = p_mid->p_next;
p_first->p_next = p_temp;
p_temp->p_next = p_mid;
return 1;
}
//
int link_append(link *p_link, int num)
{
node *p_tmp = (node *)malloc(sizeof(node));
node *p_node = NULL;
if (!p_tmp)
{
return 0;
}
p_tmp->num = num;
for (p_node = &(p_link->head);p_node != &(p_link->tail);p_node = p_node->p_next)
{
node *p_first = p_node;
node *p_mid = p_first->p_next;
node *p_last = p_mid->p_next;
if (p_mid == &(p_link->tail))
{
p_first->p_next = p_tmp;
p_tmp->p_next = p_mid;
break;
}
}
return 1;
}
//
int link_insert(link *p_link, int num)
{
node* p_temp = (node *)malloc(sizeof(node));
node* p_node = NULL;
if (!p_temp)
{
return 0;
}
p_temp->num = num;
p_temp->p_next = NULL;
for (p_node = &(p_link->head);p_node != &(p_link->tail);p_node = p_node->p_next)
{
node *p_first = p_node;
node *p_mid = p_first->p_next;
node *p_last = p_mid->p_next;
if (p_mid == &(p_link->tail) || p_mid->num > p_temp->num)
{
p_first->p_next = p_temp;
p_temp->p_next = p_mid;
break;
}
}
return 0;
}
//
int link_remove_head(link *p_link)
{
node *p_first = &(p_link->head);
node *p_mid = p_first->p_next;
node *p_last = p_mid->p_next;
if (p_link->head.p_next == &(p_link->tail))
{
return 0;
}
p_first->p_next = p_last;
free(p_mid);
p_mid = NULL;
}
//
int link_remove_tail(link *p_link)
{
node *p_node = NULL;
for (p_node = &(p_link->head);p_node !=&(p_link->tail);p_node = p_node->p_next)
{
node *p_first = p_node;
node *p_mid = p_first->p_next;
node *p_last = p_mid->p_next;
if (p_last == &(p_link->tail))
{
p_first->p_next = p_last;
free(p_mid);
p_mid = NULL;
return 1;
}
}
return 0;
}
//
int link_remove(link *p_link, int num)
{
node *p_node = NULL;
for (p_node = &(p_link->head);p_node != &(p_link->tail);p_node = p_node->p_next)
{
node *p_first = p_node;
node *p_mid = p_first->p_next;
node *p_last = p_mid->p_next;
if (p_mid != &(p_link->tail) && p_mid->num == num)
{
p_first->p_next = p_last;
free(p_mid);
p_mid = NULL;
return 1;
}
}
return 0;
}
//
int link_get_head(link *p_link, int *p_num)
{
if (p_link->head.p_next == &(p_link->tail))
{
return 0;
}
node *p_first = &(p_link->head);
node *p_mid = p_first->p_next;
node *p_last = p_mid->p_next;
p_first->p_next = p_last;
*p_num = p_mid->num;
return 1;
}
//
int link_get_tail(link *p_link, int *p_num)
{
node *p_node = NULL;
for (p_node = &(p_link->head);p_node != &(p_link->tail);p_node = p_node->p_next)
{
node *p_first = p_node;
node *p_mid = p_first->p_next;
node *p_last = p_mid->p_next;
if (p_last == &(p_link->tail))
{
*p_num = p_mid->num;
return 1;
}
}
return 0;
}
//
int link_get(link *p_link, int *p_num, int num)
{
int cnt = 0;
node *p_node = NULL;
for (p_node = &(p_link->head);p_node != &(p_link->tail);p_node = p_node->p_next)
{
node *p_first = p_node;
node *p_mid = p_first->p_next;
node *p_last = p_mid->p_next;
if (p_mid != &(p_link->tail) && cnt == num)
{
*p_num = p_mid->num;
return 1;
}
cnt++;
}
return 0;
}
테스트 함수:
/*
*
* */
#include <stdio.h>
#include "link_0505.h"
int main() {
int size = 0, num = 0, val = 0;
link lnk = {0};
link_init(&lnk);
link_add_head(&lnk, 30);
link_add_head(&lnk, 20);
link_append(&lnk, 90);
link_append(&lnk, 100);
link_insert(&lnk, 50);
link_insert(&lnk, 60);
link_insert(&lnk, 40);
link_insert(&lnk, 80);
link_insert(&lnk, 70);
size = link_size(&lnk);
for (num = 0;num <= size - 1;num++) {
link_get(&lnk, &val, num);
printf("%d ", val);
}
printf("
");
printf("------------------");
link_remove_head(&lnk);
link_remove_tail(&lnk);
link_remove(&lnk, 70);
size = link_size(&lnk);
for (num = 0;num <= size - 1;num++) {
link_get(&lnk, &val, num);
printf("%d ", val);
}
printf("
");
link_get_head(&lnk, &val);
printf(" %d
", val);
link_get_tail(&lnk, &val);
printf(" %d
", val);
link_deinit(&lnk);
return 0;
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 체인 시계는 뱀을 탐식하는 작은 게임을 실현한다본고의 실례는 여러분에게 C 언어 체인표가 뱀 탐식 게임을 실현하는 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다. 프로젝트 이름: 뱀놀이 운영 환경: Linux 프로그래밍 언어: C 언...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.