데이터 구조 - 선형 표 의 체인 구조 (C 언어)
다음은 원본 프로그램 입 니 다.
함수 선언
#ifndef List_H
#define List_H
typedef struct Node *PNode;//
typedef int Item;//
typedef struct Node//
{
Item data;//
PNode next;//
}node;
typedef PNode Position;
typedef PNode List;
/** **/
/*** , ***/
List Creat_Empty(List);
/*** ***/
int Is_Empty(List);
/*** , ***/
List Make_List();
/*** ***/
List Invert(List);
/*** ***/
int Is_Last(Position);
/*** ***/
int Length(List);
/*** ***/
void Traverse_List(List);
/*** ***/
void Insert(Item,List,Position);
/*** , ***/
int Search(Item,List);
/*** , ***/
Position Search_Previous(Item,List);
/*** , ***/
Position Search_Next(Item,List);
/*** P ***/
Position Advance(Position P);
/*** ***/
void Delete(Item,List);
/*** ***/
void Delete_List(List);
/*** P ***/
int Get_Item(Position P);
#endif
함수 정의
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include"List.h"
/** **/
/*** , ***/
List Creat_Empty(List L)
{
L=(PNode)malloc(sizeof(node));
L->next=NULL;
L->data=0;
return L;
}
/*** ***/
int Is_Empty(List L)
{
return L->next==NULL;
/*
if(NULL==L->next)
return 1;
else
return 0;
*/
}
/*** , ***/
List Make_List()
{
int val;
PNode pHead =(PNode)malloc(sizeof(node));
PNode pCurrent = pHead;
pCurrent->next = NULL;
if(NULL==pHead)
{
printf("Malloc the list is failed.");
exit(1);
}
printf("Input the first data:");
while(scanf("%d",&val)==1)
{
PNode pNew=(PNode)malloc(sizeof(node));
if(NULL==pNew)
{
printf("Malloc the pNew is failed.");
exit(1);
}
pNew->data=val;
pCurrent->next=pNew;
pNew->next=NULL;
pCurrent=pNew;
printf("Please input the next data:");
}
return pHead;
}
/*** ***/
List Invert(List Head)
{
PNode middle, trail;
middle = NULL;
PNode temp = Head->next;
while(temp)
{
trail = middle;
middle = temp;
temp = temp->next;
middle->next = trail;
}
Head->next = middle;
return Head;
}
/*** ***/
int Is_Last(Position P)
{
return P->next==NULL;
}
/*** ***/
int Length(List L)
{
int len=0;
PNode PCurrent=L->next;
while(NULL!=PCurrent)
{
len++;
PCurrent=PCurrent->next;
}
return len;
}
/*** ***/
void Traverse_List(List L)
{
PNode PCurrent=L->next;
printf("The data of list are:
");
while(NULL!=PCurrent)
{
printf("%d ",PCurrent->data);
PCurrent=PCurrent->next;
}
printf("
");
}
/*** ***/
void Insert(Item val,List L,Position P)
{
PNode temp;
temp=(PNode)malloc(sizeof(node));
if(NULL==temp)
exit(0);
temp->data=val;
temp->next=P->next;
P->next=temp;
}
/*** , ***/
int Search(Item val,List L)
{
Position P;
P=L->next;
if(P!=NULL && P->data !=val)
P=P->next;
return P->data;
}
/*** , ***/
Position Search_Previous(Item val,List L)
{
Position P;
P=L;
if(P->next!=NULL && P->next->data!=val)
P=P->next;
return P;
}
/*** , ***/
Position Search_Next(Item val,List L)
{
Position P;
P=L;
if(P!=NULL && P->data!=val)
P=P->next;
return P;
}
/*
P
*/
Position Advance(Position P)
{
if(P!=NULL)
return P->next;
}
/*** ***/
void Delete(Item val,List L)
{
Position P, temp;
P=Search_Previous(val,L);
if(!Is_Last(P))
{
temp=P->next;
P->next=temp->next;
free(temp);
}
}
/*** L ***/
void Delete_List(List L)
{
Position P, temp;
P=L->next;
L->next=NULL;
while(P!=NULL)
{
temp=P->next;
free(P);
P=temp;
}
}
/*** P ****/
int Get_Item(Position P)
{
if(P!=NULL)
return P->data;
}
테스트 프로그램
#include<stdio.h>
#include<stdlib.h>
#include"List.h"
#define NUMBER 5
#define N 3
int main(void)
{
List list;
Position P;
int len,val;
list=NULL;
List L=NULL;
L=Creat_Empty(L);//
printf("The empty of list is created.
");
if(Is_Empty(L))//
printf("The list is empty.
");
list=Make_List();//
Traverse_List(list);//
list=Invert(list);//
Traverse_List(list);//
len=Length(list);//
if(!Is_Empty(list))
printf("The length of list is:%d
",len);
P=list;
Insert(NUMBER,list,P);//
P= Advance(P);// P
if(P)
printf("Insert the new data of %d is successed
",Get_Item(P));
else
printf("Insert the data of %d is failed.
",NUMBER);
Traverse_List(list);//
val=Search(N,list);//
if(val==N)
printf("Search the data of %d is successed.
",N);
else
printf("Search the data of %d is failed.
",N);
Delete(NUMBER,list);//
Traverse_List(list);//
Delete_List(list);//
if(Is_Empty(list))
printf("The list is destroied.");
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에 따라 라이센스가 부여됩니다.