c 언어 는 단일 체인 표 데이터 구조 와 기본 적 인 조작 을 실현 한다.
단일 체인 표 의 일부 조작 을 제 시 했 고 모든 조작 에 해당 하 는 주석 이 이 함수 기능 을 설명 합 니 다.
test.c 파일 에 서 는 입력 데이터 가 합 법 적 인지 검 사 했 으 나 입력 데이터 가 합 법 적 이지 않 을 때 취해 야 할 조 치 를 실현 하지 못 했다.
테스트 파일 하나의 메뉴 를 통 해 단일 링크 기능 을 테스트 합 니 다.
list.h:
/* */
#ifndef LIST_H_
#define LIST_H_
struct Node; // , ,
/* */
typedef int ElementType; //
typedef struct Node * PtrToNode;
typedef PtrToNode List;
typedef PtrToNode Position;
/* */
struct Node {
ElementType element;
Position next;
};
/* */
List MakeEmpty ( List l );
int IsEmpty ( List L );
int IsLast ( Position p, List l );
Position Find ( ElementType x, List l );
void Delete ( ElementType x, List l );
Position FindPrevious ( ElementType x, List l );
void Insert ( ElementType x, List l, Position p );
void DeleteList ( List l );
Position Header ( List l );
Position First ( List l );
Position Last ( List l );
Position Advance ( Position p );
ElementType Retrieve ( Position p );
void PushFront ( ElementType x, List l );
void PopFront ( List l );
void PushBack ( ElementType x, List l );
void PopBack ( List l );
#endif
test.c:
/* */
#include
#include
#include "list.h"
struct Node;
void Menu ( void ); //
void PrintList ( List l ); //
int main ( void )
{
List l;
int choice;
ElementType x;
l = NULL;
choice = 0;
x = 0;
Menu ( );
scanf ( "%d", &choice );
while ( 0 != choice )
{
switch ( choice )
{
case 1: if ( NULL == ( l = MakeEmpty ( l ) ) ) // , l 。 MakeEmpty , ! !!
{
printf ( " !
" );
}
else
{
printf ( " !
" );
}
break;
case 2: if ( 1 == IsEmpty ( l ) )
{
printf ( " !
" );
}
else
{
printf ( " !
" );
}
break;
case 3: {
Position p;
p = Last ( l );
if ( NULL == p )
{
printf ( "0. , !
" );
break;
}
if ( 1 == IsLast ( p , l ) )
{
printf ( "1. !
" );
}
if ( 0 == IsLast ( l, l ) )
{
printf ( "2. !
" );
}
break;
}
case 4: printf ( " : " );
if ( 1 == scanf ( "%d", &x ) )
{
Position tmp;
tmp = Find ( x ,l );
if ( NULL == tmp )
{
printf ( " %d !
", x );
}
else
{
printf ( " %d!
", ( Retrieve ( tmp ) ) );
}
}
else
{
printf ( " , !
" );
}
break;
case 5: printf ( " : " );
if ( 1 == scanf ( "%d", &x ) )
{
Delete ( x, l );
printf ( " !
" );
}
else
{
printf ( " , !
" );
}
break;
case 6: printf ( " : " );//
if ( 1 == scanf ( "%d", &x ) )
{
Insert ( x, l, l );
printf ( " !
" );
}
else
{
printf ( " , !
" );
}
break;
case 7: DeleteList ( l );
printf ( " !
" );
l = NULL;
break;
case 8: printf ( " : " );
if ( 1 == scanf ( "%d", &x ) )
{
PushFront ( x, l );
printf ( " !
" );
}
else
{
printf ( " , !
" );
}
break;
case 9: PopFront ( l );
printf ( " !
" );
break;
case 10: printf ( " : " );
if ( 1 == scanf ( "%d", &x ) )
{
PushBack ( x, l );
printf ( " !
" );
}
else
{
printf ( " , !
" );
}
break;
case 11: PopBack ( l );
printf ( " !
" );
break;
case 12: PrintList ( l );
break;
default: printf ( " !
" );
break;
}
Menu ( );
scanf ( "%d", &choice );
}
system ( "pause" );
return 0;
}
void Menu ( void ) //
{
printf ( "***************************************************************
" );
printf ( " 1. 2.
" );
printf ( " 3. 4.
" );
printf ( " 5. 6.
" );
printf ( " 7. 8.
" );
printf ( " 9. 10.
" );
printf ( " 11. 12.
" );
printf ( "***************************************************************
" );
}
void PrintList ( List l ) //
{
Position p;
p = l -> next;
while ( NULL != p )
{
printf ( "%d -> ", ( p -> element ) );
p = p -> next;
}
printf ( "
" );
}
list.c:
/* list.c -- */
#include
#include
#include "list.h"
/* */
/* */ // ( .)
List MakeEmpty ( List l ) // l ,
{
if ( NULL != l ) // -> c , free( ) NULL
{
DeleteList ( l );
}
l = ( List )malloc ( sizeof ( struct Node ) );//malloc !
if ( NULL == l )
{
printf ( " !" );
return NULL;
}
l -> element = 0;
l -> next = NULL;
return l;
}
/* */
int IsEmpty ( List l )
{
return ( NULL == l -> next );
}
/* */ //
int IsLast ( Position p, List l )
{
return ( NULL == p -> next );
}
/* x */
Position Find ( ElementType x, List l )
{
Position p;
p = l -> next; // .
while ( ( NULL != p ) && ( x != p -> element ) )
{
p = p -> next;
}
return p;
}
/* x */ // ,
void Delete ( ElementType x, List l ) // FindPrevious( )
{
Position p;
Position tmpCell;
p = FindPrevious ( x, l );
if ( !( IsLast ( p, l ) ) )
{
tmpCell = p -> next;
p -> next = p -> next -> next; // ! p next , p!
free ( tmpCell ); //free( ) , NULL.
tmpCell = NULL;
}
}
/* x */ // Find , ( Find , )
Position FindPrevious ( ElementType x, List l )
{
Position p;
p = l; // , l
while ( ( NULL != p -> next ) && ( x != p -> next -> element ) )
{
p = p -> next;
}
return p; // next ! !
}
/* x */
/* */
void Insert ( ElementType x, List l, Position p )
{
Position tmpCell; // , malloc .5.
tmpCell = ( List )malloc ( sizeof ( struct Node ) );//struct Node , sizeof( sturct Node ) . malloc.
if ( NULL == tmpCell ) // , malloc , malloc 6.
{
printf ( " " );
}
else
{
tmpCell -> element = x;
tmpCell -> next = p -> next;
p -> next = tmpCell;
}
}
/* */
void DeleteList ( List l ) // .
{
Position p;
Position tmp;
p = l -> next; //l next p free l , p l 。 lnext
free ( l ); // l l , l, l .
l = NULL; // , l , l 。 , !
while ( NULL != p )
{
tmp = p -> next;
free ( p ); // p, p next ( )
p = tmp;
}
}
/* */ //
Position Header ( List l )
{
return l;
}
/* */ //
Position First ( List l )
{
return ( l -> next );
}
/* */ //
Position Last ( List l )
{
Position p = l;
if ( NULL == l -> next ) // , , .
{
return NULL;
}
else
{
while ( NULL != p -> next )
{
p = p -> next;
}
}
return p;
}
/* p */ //
Position Advance ( Position p )
{
return ( p -> next );
}
/* p */ //
ElementType Retrieve ( Position p )
{
return ( p -> element );
}
/////* x */ // 1
//void PushFront ( ElementType x, List l ) // Header( ) Insert( )
//{
// Insert ( x, l, Header ( l ) );
//}
/* x */ // 2
void PushFront ( ElementType x, List l )
{
Position tmp; // l -> next.
tmp = ( List )malloc ( sizeof ( struct Node ) );
if ( NULL == tmp )
{
printf ( " , !" );// ( ).
}
else
{
tmp -> element = x;
tmp -> next = l -> next;
l -> next = tmp;
}
}
/* */
void PopFront ( List l )
{
if ( NULL == l -> next )
{
;
}
else
{
Position tmp;
tmp = l -> next; // l next , next ( ).
l -> next = tmp -> next;
free ( tmp ); // next , , next.
tmp = NULL;
}
}
/* x */
void PushBack ( ElementType x, List l ) // Header( )
{
Position p;
Position tmp;
p = Header ( l );
while ( NULL != p -> next )
{
p = p -> next;
}
tmp = ( List )malloc ( sizeof ( struct Node ) );
if ( NULL == tmp )
{
printf ( " , " );
}
else
{
tmp -> element = x;
tmp -> next = NULL;
p -> next = tmp;
}
}
/* */
void PopBack ( List l )
{
if ( NULL == l -> next )
{
;
}
else
{
Position p;
p = l;
while ( NULL != p -> next -> next )
{
p = p -> next;
}
free ( p -> next );
p -> next = NULL;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.