데이터 구조 - 이중 순환 링크 일부 기능 의 C 언어 구현
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct Node{
int data;
Node *next;
Node *last;
}Node,*PNode;//
typedef struct List{
PNode head;
PNode tail;
int length;
}List,*PList;//
void initList(PList x){
PNode headNode=(PNode)malloc(sizeof(Node));
if(!headNode)
exit(0);
headNode->data=0;
headNode->next=headNode;
x->head=headNode;
x->tail=headNode;
x->length=0;
}//
int insertNode(PList x,int i,int e){
if(i>x->length)
return 1;
PNode newNode=(PNode)malloc(sizeof(Node));
if(!newNode)
exit(0);
newNode->data=e;
PNode p=x->head;
for(int j=0;j<i;j++)
p=p->next;
newNode->next=p->next;
p->next=newNode;
newNode->last=p;
newNode->next->last=newNode;
if(i==x->length)
x->tail=newNode;
x->length++;
return 0;
}//
int deleteNode(PList x,int i){
if(i>x->length)
return 1;
PNode p=x->head;
for(int j=0;j<i-1;j++)
p=p->next;
PNode delNode=p->next;
p->next=delNode->next;
p->next->last=p;
if(i==x->length)
x->tail=p;
free(delNode);
x->length--;
return 0;
}//
void outputList(PList x,int h_t=0){
if(h_t==0){
PNode p=x->head->next;
for(int i=0;i<x->length;i++){
printf("%3d",p->data);
p=p->next;
}
printf("
");
}
else{
PNode p=x->tail;
for(int i=0;i<x->length;i++){
printf("%3d",p->data);
p=p->last;
}
printf("
");
}
}// , ,
int deleteList(PList x){
while(x->length>0){
deleteNode(x,x->length);
x->length--;
}
free(x->head);
x->head=NULL;
x->tail=NULL;
}//
int main(){
//
PList myList=(PList)malloc(sizeof(List));
initList(myList);
//
int e=0;
printf(" (10 ):");
for(int i=0;i<10;i++){
scanf("%d",&e);
insertNode(myList,myList->length,e);
}
outputList(myList,1);
//
deleteList(myList);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.