데이터 구조: 헤드 없 는 단 방향 비 순환 링크 의 간단 한 기능 활용
5078 단어 데이터 구조 와 알고리즘
그 중에서 함수 실 삼 에 대한 검 사 는 모두 assert 함수 로 이 루어 진다.
#pragma once
typedef int SLTDataType;
typedef struct slistNode{
struct slistNode* next;
SLTDataType data;
}slistNode;
typedef struct first{
struct slistNode*first;
}slist;
void slistInIt(slist*list);
void slistDestory(slist* list);
slistNode* buyslistNode(SLTDataType data);
void slistPrint(slist* list);
//
void slistPushFront(slist*list,SLTDataType data);
void slistPushBack(slist* list, SLTDataType data);
void slistPopFront(slist* list);
void slistPopBack(slist* list);
slistNode* slistFind(slist* list, SLTDataType data);
void slistModify(slist* list,SLTDataType data,SLTDataType x);
void SListInsertAfter(slistNode* pos, SLTDataType data);
void SListEraseAfter(slistNode* pos);
void SListRemove(slist* list, SLTDataType data);
void slistReverselist(slist* list);
slist. c 헤더 파일 slist. h 함수 성명 의 정의
#include "slist.h"
#include
#include
#include
void slistInIt(slist*list)
{
assert(list);
list->first = NULL;
}
void slistDestory(slist* list)
{
slistNode* temp;
for (slistNode* cur=list->first; cur !=NULL; cur=temp)
{
temp = cur->next;
free(cur);
}
list->first = NULL;
}
slistNode* buyslistNode(SLTDataType data)
{
slistNode* p = (slistNode*)malloc(sizeof(slistNode));
assert(p);
p->data = data;
return p;
}
void slistPushFront(slist*list, SLTDataType data)
{
assert(list);
slistNode* temp = list->first;
list->first = buyslistNode(data);
list->first->next = temp;
}
void slistPushBack(slist* list, SLTDataType data)
{
assert(list);
if (list->first==NULL)
{
slistPushFront(list, data);
return;
}
slistNode* cur = list->first;
for (; cur->next != NULL; cur = cur->next);
cur->next = buyslistNode(data);
cur->next->next = NULL;
}
void slistPopFront(slist* list)
{
assert(list);
assert(list->first != NULL);
slistNode* temp = list->first;
list->first = list->first->next;
free(temp);
}
void slistPopBack(slist* list)
{
assert(list);
slistNode* cur = list->first;
for (; cur->next->next != NULL; cur = cur->next);
free(cur->next);
cur->next = NULL;
}
void slistPrint(slist* list)
{
assert(list);
for (slistNode* cur = list->first; cur != NULL; cur = cur->next)
{
printf("%d -->", cur->data);
}
printf("NULL
");
}
slistNode* slistFind(slist* list, SLTDataType data)
{
assert(list);
for (slistNode* cur = list->first; cur != NULL; cur = cur->next)
{
if (cur->data==data)
{
return cur;
}
}
return NULL;
}
void slistModify(slist* list, SLTDataType data,SLTDataType x)
{
assert(list);
slistNode* temp = slistFind(list,data);
temp->data = x;
}
void SListInsertAfter(slistNode* pos, SLTDataType data)
{
slistNode* temp =pos->next;
pos->next = buyslistNode(data);
pos->next->next = temp;
}
void SListEraseAfter(slistNode* pos)
{
slistNode* temp = pos->next;
pos->next = pos->next->next;
free(temp);
}
void SListRemove(slist* list, SLTDataType data)
{
assert(list);
slistNode* prev=list->first;
slistNode* cur = list->first->next;
for (; cur != NULL; cur = prev->next)
{
if (cur->data == data)
{
prev->next = cur->next;
free(cur);
}
else
{
prev = cur;
}
}
if (list->first->data ==data);
{
slistPopFront(list);
}
}
void slistReverselist(slist* list)
{
assert(list);
slistNode* head = NULL;
slistNode* cur;
while (list->first!= NULL)
{
cur = list->first;
list->first = list->first->next;
cur->next = head;
head = cur;
}
list->first = head;
}
Main. c slist. h 헤더 파일 의 함수 에 대한 테스트 검사
#include "slist.h"
#include
#include
test(slist* list)
{
slistPushFront(list, 5);
slistPushFront(list, 4);
slistPushFront(list, 3);
slistPushFront(list, 2);
slistPushFront(list, 1);
slistPrint(list);//12345
slistPushBack(list, 6);
slistPushBack(list, 7);
slistPushBack(list, 8);
slistPushBack(list, 9);
slistPushBack(list, 10);
slistPrint(list);//12345678910
slistPopBack(list);
slistPopBack(list);
slistPopBack(list);
slistPrint(list);//1234567
slistPopFront(list);
slistPopFront(list);
slistPopFront(list);
slistPrint(list);//4567
printf("%p
", list->first->next);
slistNode* cur=slistFind(list,5);
printf("%p
",cur);
slistModify(list,4,3);
slistPrint(list);
SListInsertAfter(cur, 0);
slistPrint(list);
SListEraseAfter(cur);
slistPrint(list);//3567
slistPushFront(list, 3);
slistPushFront(list, 2);
slistPushFront(list, 3);
slistPrint(list); //3233567
SListRemove(list, 3);
slistPrint(list);//2567
slistReverselist(list);
slistPrint(list);//7652
}
int main()
{
slist list;
slistInIt(&list);
test(&list);
system("pause");
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[JAVA] 배열 회전 출력요소 가 출력 을 시작 하 는 위치 에 주의 하 십시오. 모두 몇 라운드 의 수출 이 있 습 니까? n/2 + 1 매 라 운 드 는 상, 우, 하, 좌 로 나 뉜 다. 각 방향의 시작 위치 와 좌표 의 관 계 를 구...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.