무 두 결점 단일 체인 테이블 기본 조작
linklist.h
#pragma once
#include <stdio.h>
#include <assert.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
typedef int DataType;
typedef struct ListNode
{
struct ListNode* pNext;
DataType _data;
}Node,*PNode;
//
void SListInit(PNode* pHead);
//
PNode BuyListNode(DataType data);
//
void SListPushBack(PNode* pHead, DataType data);
//
void SListPopBack(PNode* pHead);
//
void SListPushFront(PNode* pHead, DataType data);
//
void SListPopFront(PNode* pHead);
// data , data
PNode SListFind(PNode pHead, DataType data);
// pos data
void SListInsert(PNode* pHead, PNode pos, DataType data);
// pos
void SListErase(PNode* pHead, PNode pos);
//
int SListSize(PNode pHead);
//
int SListEmpty(PNode pHead);
//
void SListDestroy(PNode* pHead);
//
void print(PNode pHead);
linklist.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "linklist.h"
//
void SListInit(PNode* pHead)
{
assert(pHead); // pHead , , ,
// NULL , assert
*pHead = NULL;
}
//
void SListPushBack(PNode* pHead, DataType data)
{
assert(pHead);
if(*pHead == NULL)
*pHead = BuyListNode(data);
else
{
PNode pCur = *pHead;
#if 1
while(pCur->pNext) // pNext , pCur->pNext
pCur = pCur->pNext;
#else
PNode pPre = NULL;
while(pCur)
{
pPre = pCur;
pCur = pCur->pNext; // , pCur
// , pCur->pNext
}
pCur = pPre;
#endif
pCur->pNext = BuyListNode(data); // pCur->pNext , pCur->pNext
}
}
//
void SListPopBack(PNode* pHead)
{
// 1、0 2、1 3、
PNode pCur = *pHead;
PNode pPre = NULL;
assert(pHead);
if(*pHead == NULL)
{
printf(" !
");
return;
}
else if((*pHead)->pNext == NULL)
{
free(*pHead);
*pHead = NULL;
return;
}
while(pCur->pNext != NULL)
{
pPre = pCur;
pCur = pCur->pNext;
}
free(pCur);
pPre->pNext = NULL;
}
//
void SListPushFront(PNode* pHead, DataType data)
{
PNode pCur;
assert(pHead);
if(*pHead == NULL)
{
*pHead = BuyListNode(data);
}
else
pCur = BuyListNode(data);
pCur->pNext = *pHead;
*pHead = pCur;
}
//
void SListPopFront(PNode* pHead)
{
PNode next;
assert(pHead);
if(*pHead == NULL)
{
printf(" !
");
return;
}
else
{
next = (*pHead)->pNext;
free(*pHead);
*pHead = next;
}
}
//
PNode SListFind(PNode pHead, DataType data)
{
if(pHead == NULL)
return NULL;
while(pHead)
{
if(pHead->_data == data)
return pHead;
pHead = pHead->pNext;
}
return NULL;
}
// pos data
void SListInsert(PNode* pHead, PNode pos, DataType data)
{
assert(pHead);
if(*pHead == NULL || pos == NULL)
return ;
if(*pHead == pos)
{
PNode pCur =BuyListNode(data);
pCur->pNext = *pHead;
*pHead = pCur;
}
else
{
PNode pCur = *pHead;
PNode pPre = NULL;
while( pCur != pos && pCur )
{
pPre = pCur;
pCur = pCur->pNext;
}
if(pCur)
{
PNode pNew = BuyListNode(data);
pNew->pNext = pCur;
pPre->pNext = pNew;
}
}
}
// pos
void SListErase(PNode* pHead, PNode pos)
{
assert(pHead);
if(*pHead == NULL || pos == NULL)
return;
else if(pos == *pHead)
{
PNode pDel = *pHead;
*pHead = (*pHead)->pNext;
free(pDel);
}
else
{
PNode pCur = *pHead;
PNode pPre = NULL;
while(pCur!=pos && pCur)
{
pPre = pCur;
pCur = pCur->pNext;
}
if(pCur)
{
pPre->pNext = pCur->pNext;
free(pCur);
}
}
}
//
int SListSize(PNode pHead)
{
int count = 0;
if(pHead == NULL)
return 0;
else
{
while(pHead)
{
count++;
pHead = pHead->pNext;
}
}
return count;
}
//
int SListEmpty(PNode pHead)
{
return pHead?1:0;
//if(pHead == NULL)
//{
// printf(" !
");
// return 0;
//}
//else
// printf(" !
");
//return 0;
}
//
void SListDestroy(PNode* pHead)
{
PNode pCur = *pHead;
PNode pNext = NULL;
assert(pHead);
if(*pHead == NULL)
return;
else
{
*pHead = NULL;
while(pCur)
{
pNext = pCur->pNext;
free(pCur);
pCur = pNext;
}
}
}
//
PNode BuyListNode(DataType data)
{
PNode pNewNode = (PNode)malloc(sizeof(Node));
if(pNewNode == NULL)
{
assert(0);
return NULL;
}
pNewNode->_data = data;
pNewNode->pNext = NULL;
return pNewNode;
}
//
void print(PNode pHead)
{
if(pHead == NULL)
{
printf("NULL
");
return;
}
while(pHead)
{
printf("%d->",pHead->_data);
pHead = pHead->pNext;
}
printf("NULL
");
}
test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "linklist.h"
void test();
void test1();
int main()
{
test();
return 0;
}
//
// 、 、 、 、
void test1()
{
PNode pHead = NULL;
SListInit(&pHead); //
SListPushBack(&pHead,54); //
SListPushBack(&pHead,465);
SListPushBack(&pHead,8);
SListPushBack(&pHead,78);
printf("%p
",SListFind(pHead,465)); // 465 (465 )
printf("%d
",SListFind(pHead,465)->_data); // 465
SListInsert(&pHead,SListFind(pHead,54),100);// 54 100
print(pHead);
SListErase(&pHead,SListFind(pHead,100)); // 100
print(pHead);
printf(" :%d
",SListSize(pHead)); //
printf("%d
",SListEmpty(pHead)); // 1 0
SListDestroy(&pHead); //
print(pHead);
}
//
// 、 、 、
void test()
{
PNode pHead = NULL; //
SListInit(&pHead); //
SListPushBack(&pHead,3); //
SListPushBack(&pHead,4); //
print(pHead);
SListPushFront(&pHead,6); //
SListPushFront(&pHead,34);
SListPushFront(&pHead,54);
print(pHead);
SListPopBack(&pHead); //
SListPopFront(&pHead); //
print(pHead);
SListDestroy(&pHead);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
c 언어 간단한 파일 r/w 조작 방법데이터의 입력과 출력은 거의 모든 C 언어 프로그램과 수반된다. 입력이란 원본에서 데이터를 얻는 것이다. 출력은 단말기에 데이터를 쓰는 것으로 이해할 수 있다.이곳의 원본은 키보드, 마우스, 하드디스크, 시디, 스캐...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.