[데이터 구조] C 언어 실현: 단일 체인 테이블
8429 단어 데이터 구조데이터 구조 (C 언어 구현)
#ifndef SLIST_H
#define SLIST_H
#include
#include
typedef struct SListNode_struct
{
int m_Data;
struct SListNode_struct * m_Next;
} SListNode_t;
typedef struct
{
SListNode_t * m_Head;
size_t m_Count;
} SList_t;
bool SList_Init(SList_t * list);
bool SList_Insert(SList_t * list, int index, int data);
bool SList_Delete(SList_t * list, int index);
bool SList_Update(SList_t * list, int index, int newData);
void SList_Reverse(SList_t * list);
void SList_Empty(SList_t * list);
bool SList_Sort(SList_t * list);
void SList_Print(const SList_t * list);
static inline size_t SList_Count(const SList_t * list)
{
return list->m_Count;
}
static inline bool SList_IsEmpty(const SList_t * list)
{
return list->m_Count == 0;
}
#endif
SList.c
#include
#include
#include
#include
#include "SList.h"
void QuickSort(int array[], int firstIndex, int lastIndex)
{
int i = 0;
int j = 0;
int key = 0;
if(firstIndex >= lastIndex)
return;
i = firstIndex;
j = lastIndex;
key = array[firstIndex];
while(i < j)
{
while(i < j && key <= array[j])
j--;
array[i] = array[j];
while(i < j && array[i] <= key)
i++;
array[j] = array[i];
}
array[i] = key;
QuickSort(array, firstIndex, i - 1);
QuickSort(array, i + 1, lastIndex);
}
bool SList_Init(SList_t * list)
{
if(!list)
return false;
SListNode_t * node = malloc(sizeof(SListNode_t));
if(!node)
return false;
node->m_Data = 0;
node->m_Next = NULL;
list->m_Head = node;
list->m_Count = 0;
return true;
}
bool SList_Insert(SList_t * list, int index, int data)
{
SListNode_t * p = NULL;
if(!list)
return false;
if(index < 0)
index = 0;
if(index > list->m_Count)
index = list->m_Count;
SListNode_t * node = malloc(sizeof(SListNode_t));
if(!node)
return false;
node->m_Data = data;
p = list->m_Head;
for(int i = 0; i < index; i++)
p = p->m_Next;
node->m_Next = p->m_Next;
p->m_Next = node;
list->m_Count++;
return true;
}
bool SList_Delete(SList_t * list, int index)
{
SListNode_t * p = NULL;
SListNode_t * q = NULL;
if(!list)
return false;
if(index < 0 || index >= list->m_Count)
return false;
p = list->m_Head;
for(int i = 0; i < index; i++)
p = p->m_Next;
q = p->m_Next;
p->m_Next = q->m_Next;
free(q);
list->m_Count--;
return true;
}
bool SList_Update(SList_t * list, int index, int newData)
{
SListNode_t * p = NULL;
if(!list)
return false;
if(index < 0 || index >= list->m_Count)
return false;
p = list->m_Head->m_Next;
for(int i = 0; i < index; i++)
p = p->m_Next;
p->m_Data = newData;
return true;
}
void SList_Reverse(SList_t * list)
{
SListNode_t * p = NULL;
SListNode_t * q = NULL;
SListNode_t * r = NULL;
if(!list)
return;
if(list->m_Count < 2)
return;
p = list->m_Head->m_Next;
q = p->m_Next;
p->m_Next = NULL;
while(q)
{
r = q->m_Next;
q->m_Next = p;
p = q;
q = r;
}
list->m_Head->m_Next = p;
}
void SList_Empty(SList_t * list)
{
SListNode_t * p = NULL;
SListNode_t * q = NULL;
p = list->m_Head->m_Next;
while(p)
{
q = p->m_Next;
free(p);
p = q;
}
list->m_Head->m_Next = NULL;
list->m_Count = 0;
}
bool SList_Sort(SList_t * list)
{
int * array = NULL;
SListNode_t * p = NULL;
size_t count = 0;
count = list->m_Count;
array = malloc(sizeof(int) * count);
if(!array)
return false;
p = list->m_Head->m_Next;
for(int i = 0; i < count; i++, p = p->m_Next)
{
array[i] = p->m_Data;
}
// array[]
QuickSort(array, 0, count - 1);
SList_Empty(list);
for(int i = 0; i < count; i++)
{
SList_Insert(list, list->m_Count, array[i]);
}
return true;
}
void SList_Print(const SList_t * list)
{
SListNode_t * p = NULL;
if(!list)
return;
printf("[ ");
p = list->m_Head->m_Next;
while(p)
{
printf("%d ", p->m_Data);
p = p->m_Next;
}
printf("]
");
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.