C 언어 양 방향 링크 의 실현 (간단 한 실현)
3385 단어 데이터 구조
양 방향 으로 사용 할 때 중요 한 것 은 체인 헤더 와 링크 꼬리 를 얻 는 것 이 고 아래 에 얻 은 관련 함수 가 있 습 니 다.
// copyright reserved by GongXu
// doubly linked list for simple using
#include
#include
/* , , */
typedef int Data_type;
struct Node_doubly {
Data_type data;
struct Node_doubly* prev;
struct Node_doubly* next;
};
typedef struct Node_doubly* Node_p;
/* */
Node_p create_list(){
Node_p list_head = (Node_p)malloc(sizeof(struct Node_doubly));
list_head->prev = NULL;
list_head->next = NULL;
return list_head;
}
/* , */
Node_p create_list_node(Data_type data){
Node_p new_node = malloc(sizeof(struct Node_doubly));
new_node->data = data;
return new_node;
};
/* */
void insert_node_by_head (Node_p list,Data_type data){
Node_p new_node = create_list_node(data);
//
if (list->next){
list->next->prev = new_node;
new_node->next = list->next;
new_node->prev = list;
list->next = new_node;
}
// ,
else{
list->next = new_node;
new_node->prev = list;
new_node->next = NULL;
}
}
/* */
void delete_node_by_head(Node_p list){
Node_p ptr = list->next;
list->next = ptr->next;
free(ptr);
}
/* */
void delete_node_by_pos(Node_p list, Data_type pos){
Node_p p_for = list;
Node_p p_aft = list->next;
while (p_aft->data != pos){
p_for = p_aft;
p_aft = p_aft->next;
if (p_aft == NULL){
printf("Not finding Positon to delete
");
return;
}
}
Node_p ptr = p_aft->next;
p_for->next = ptr;
ptr->prev = p_for;
free(p_aft);
}
/* */
Node_p get_lastNode(Node_p list){
Node_p ptr = list->next;
Node_p ptr_after = ptr;
if (ptr){
while (ptr != NULL){
ptr_after = ptr;
ptr = ptr->next;
}
return ptr_after;
}
else
return list;
}
/* , */
void print_list(Node_p list){
Node_p ptr = list->next;
while (ptr != NULL){
printf("%d\t", ptr->data);
ptr=ptr->next;
}
printf("
");
}
/* , */
void print_list_with_last(Node_p last_list){
Node_p ptr = last_list;
while (ptr->prev != NULL){
printf("%d\t", ptr->data);
ptr = ptr->prev;
}
printf("
");
}
/* , */
void destroy_list(Node_p list){
Node_p ptr = list;
Node_p ptr_q ;
while (ptr != NULL){
ptr_q=ptr->next;
ptr->next=ptr_q->next;
free(ptr_q);
ptr = ptr->next;
}
list = NULL;
}
/* */
int main(void){
//
Node_p List_head=create_list();
//
insert_node_by_head(List_head, 10);
insert_node_by_head(List_head, 11);
insert_node_by_head(List_head, 12);
insert_node_by_head(List_head, 13);
//
print_list(List_head);
//
Node_p last_list = get_lastNode(List_head);
print_list_with_last(last_list);
print_list(List_head);
delete_node_by_head(List_head);
delete_node_by_head(List_head);
print_list(List_head);
delete_node_by_pos(List_head,11);
print_list(List_head);
//
destroy_list(List_head);
print_list(List_head);
while (1);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.