First Upload
This commit is contained in:
2433
23 - Sort/General.c
Normal file
2433
23 - Sort/General.c
Normal file
File diff suppressed because it is too large
Load Diff
226
23 - Sort/General.h
Normal file
226
23 - Sort/General.h
Normal file
@@ -0,0 +1,226 @@
|
||||
#include <stdio.h>
|
||||
#include <malloc.h>
|
||||
|
||||
#define DAYS_IN_MONTH 30
|
||||
#define MONTHS_IN_YEAR 12
|
||||
#define ONE_HUNDRED 100
|
||||
#define ONE_THOSEND 10000
|
||||
#define BOOLEAN unsigned short
|
||||
#define TRUE 1
|
||||
#define FALSE 0
|
||||
#define SEVEN 7
|
||||
#define EIGHT 8
|
||||
#define TEN 10
|
||||
#define TWELVE 12
|
||||
#define THIRTY 30
|
||||
#define ZERO 0
|
||||
#define ONE 1
|
||||
#define TWO 2
|
||||
#define THREE 3
|
||||
#define FOUR 4
|
||||
#define FIVE 5
|
||||
#define TAKE_SIGNED_MATH(x) (((2 * (x)) + 1) % 2)
|
||||
#define TAKE_SIGNED(x) ((x) < 0) ? -1 : 1
|
||||
#define ABS(x) (x) * (((2 * (x)) + 1) % 2)
|
||||
#define MAX(x, y) (x > y) ? x : y
|
||||
#define MIN(x, y) (x < y) ? x : y
|
||||
#define BACKSLASH_ZERO '\0'
|
||||
#define MAX_SIZE_STRING 256
|
||||
#define MASK_FIRST_BIT 0x1
|
||||
|
||||
typedef char string[MAX_SIZE_STRING];
|
||||
typedef unsigned char byte;
|
||||
typedef unsigned short word;
|
||||
typedef unsigned int dblword;
|
||||
|
||||
typedef union
|
||||
{
|
||||
int int_;
|
||||
char char_;
|
||||
double double_;
|
||||
void * pointer;
|
||||
} Data_Type;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
Data_Type * values;
|
||||
unsigned int items;
|
||||
} stack;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
Data_Type * values;
|
||||
unsigned int items;
|
||||
} queue;
|
||||
|
||||
struct LLL
|
||||
{
|
||||
Data_Type value;
|
||||
struct LLL * next;
|
||||
};
|
||||
|
||||
struct DLLL
|
||||
{
|
||||
Data_Type info;
|
||||
struct DLLL * next;
|
||||
struct DLLL * prev;
|
||||
};
|
||||
|
||||
struct CLLL
|
||||
{
|
||||
Data_Type info;
|
||||
struct CLLL * next;
|
||||
};
|
||||
|
||||
struct CDLLL
|
||||
{
|
||||
Data_Type info;
|
||||
struct CDLLL * next;
|
||||
struct CDLLL * prev;
|
||||
};
|
||||
|
||||
struct SM
|
||||
{
|
||||
Data_Type info;
|
||||
int row;
|
||||
int col;
|
||||
struct SM * col_next;
|
||||
struct SM * row_next;
|
||||
};
|
||||
|
||||
typedef struct SM SM;
|
||||
typedef struct LLL LLL;
|
||||
typedef struct DLLL DLLL;
|
||||
typedef struct CLLL CLLL;
|
||||
typedef struct CDLLL CDLLL;
|
||||
|
||||
void ChangeYearsToMonths(int *years, short *month);
|
||||
void SwapNumbers(int *ptr_number1, int *ptr_number2);
|
||||
void SwapChars(char *ptr_char1, char *ptr_char2);
|
||||
void ChangeMonthsToDays(short *months, int *days);
|
||||
int Random(int ** seed, int min, int max);
|
||||
void ChangeDateToDays(int *date, int *days);
|
||||
void ChangeDaysToMonths(int *days, int *months);
|
||||
void ChangeMonthsToYears(int *months, int *years);
|
||||
void ChangeDaysToDate(int *days, int *date);
|
||||
int DifferentDates(int *date1, int *date2, int *different);
|
||||
BOOLEAN EvenNumber(int num);
|
||||
int OppositeNumber(int num);
|
||||
int OddDigitsInNumber(int num);
|
||||
int EvenDigitsInNumber(int num);
|
||||
int SumOfNumberWithPositiveDigitsAndNumberWithNegativeDigits(int num);
|
||||
double Power(float num, short pow);
|
||||
int GetRest(double num, unsigned short count_digits);
|
||||
unsigned short CountDigits(int num);
|
||||
float ConvertBaseToDeciaml(float num, float base, unsigned short rest_size);
|
||||
double Sum(double number1, double number2);
|
||||
int SumOfDigitsNumber(double number);
|
||||
int SumEvenDigits(double number);
|
||||
int SumOddDigits(double number);
|
||||
BOOLEAN CommonDigitsInTwoNumbers(double number1, double number2);
|
||||
double Sqrt(double number, short root);
|
||||
BOOLEAN PrimeNumber(int number);
|
||||
double Module(double number, double div); // TODO : FIX IT
|
||||
BOOLEAN DigitInNumber(double number, unsigned short digit);
|
||||
int ConcatenationNumbers(short number1, short number2);
|
||||
int Multiplication(short number1, short multiply); // TODO : FIX IT
|
||||
int GetDenominator(double number);
|
||||
short GetCounter(double number);
|
||||
double Divide(double number, double div); // TODO : FIX IT
|
||||
BOOLEAN SumInArray(int array[], unsigned int size, int sum);
|
||||
BOOLEAN ChangeBool(BOOLEAN bool1);
|
||||
BOOLEAN Equality(int number1, int number2);
|
||||
BOOLEAN NumBBiggerThenNumA(int a, int b);
|
||||
unsigned int SumOfTimesCharsArray1InCharsArray2(char array1[],
|
||||
unsigned int array1_size,
|
||||
char array2[],
|
||||
unsigned int array2_size);
|
||||
unsigned int CreateMask(unsigned short size, unsigned short digit_of_mask);
|
||||
unsigned short CountADigitInNumber(int number, unsigned short digit);
|
||||
short GetDigit(int number, unsigned short location);
|
||||
unsigned short CountOfIdenticalDigitsInSomeIndex(int number1, int number2);
|
||||
unsigned short CountOfIdenticalDigits(int number1, int number2);
|
||||
BOOLEAN ForeignDigits(int number);
|
||||
void PrintMatrix(void * ptr_mat, unsigned short col, unsigned short row, void print(void *));
|
||||
void CopyChar(char * ch, char * copy);
|
||||
void ResetMatrix(void * ptr_mat, unsigned short col, unsigned short row, void * type, void insert(void *, void *));
|
||||
BOOLEAN CharInString(char text[], char c);
|
||||
char * LastCharOfString(char * start_string);
|
||||
unsigned int StringLength(char * str);
|
||||
BOOLEAN StringCompare(char *start_stringA_index, char *start_stringB_index);
|
||||
char * IndexCharInPointers(char *start_pointer, char *end_pointer , char c);
|
||||
unsigned short CountCharInString(char *start_string_index, char *c);
|
||||
void CutString(char *start_textA_index, char *end_textA_index, char *start_textB_index);
|
||||
void CopyString(char *start_string_index, char *start_copy_index);
|
||||
void LinkingString(char *start_stringA_index, char *start_stringB_index);
|
||||
void ReverseString(char textA[]);
|
||||
BOOLEAN StringBInStringA(char *start_string_a, char *start_string_b);
|
||||
char * IndexStringBInStringA(char *start_string_a, char *start_string_b);
|
||||
unsigned int CountStringBInStringA(char *start_string_a, char *start_string_b);
|
||||
void RemoveStringBFromStringA(char *start_string_a, char *start_string_b);
|
||||
void RemoveAllStringBFromStringA(char *start_stringA_index, char *start_stringB_index);
|
||||
BOOLEAN ValidParenthesesTemplate(char text[]);
|
||||
unsigned short CharToNumber(char *c);
|
||||
unsigned int MaxCountCharInString(char *start_string_index);
|
||||
void CopyPointers(char *start_string_index, char *start_copy_index, char *end_copy_index);
|
||||
BOOLEAN EvenBits(byte b);
|
||||
unsigned short CountBits(byte b);
|
||||
void Multiply(float *ptr_number1, float *ptr_number2, double *ptr_result);
|
||||
void InitStack(stack * sk);
|
||||
BOOLEAN IsEmptyStack(stack * sk);
|
||||
void PushStack(stack * sk , Data_Type item);
|
||||
Data_Type PopStack(stack * sk);
|
||||
void EmptyStack(stack * sk);
|
||||
void CopyStack(stack * sk, stack * copy);
|
||||
void OppositeStack(stack * sk);
|
||||
BOOLEAN IsEqualsStack(stack * sk1, stack * sk2);
|
||||
unsigned int ItemsStack(stack * sk);
|
||||
int SumStack(stack * sk);
|
||||
BOOLEAN FindNumberInStack(stack * sk, Data_Type item);
|
||||
void UnionStack(stack * sk1, stack * sk2);
|
||||
void InitQueue(queue * q);
|
||||
void InsertQueue(queue * q, Data_Type item);
|
||||
Data_Type RemoveQueue(queue * q); // Fix it
|
||||
void InsertAfterList(LLL * manager);
|
||||
void PushList(LLL ** manager);
|
||||
void PopList(LLL ** manager);
|
||||
void DeleteList(LLL * manager);
|
||||
LLL * GetLoactionList(LLL ** manager, unsigned short location);
|
||||
// -------------------------------------- DLLL ------------------------------------------
|
||||
void InitDLLL(DLLL ** manager);
|
||||
void PushDLLL(DLLL ** manager);
|
||||
void InsertAfterDLLL(DLLL * ptr_before);
|
||||
void InsertBeforeDLLL(DLLL * ptr_after);
|
||||
void PopDLLL(DLLL ** manager);
|
||||
void DeleteDLLL(DLLL * ptr_cur);
|
||||
void PrintDLLL(DLLL * manager, void Print(Data_Type dt));
|
||||
// --------------------------------- CLLL -----------------------------------------------
|
||||
void InsertLastCLLL(CLLL ** manager);
|
||||
void InsertAfterCLLL(CLLL * ptr_before);
|
||||
void InsertEndCLLL(CLLL ** manager);
|
||||
void DeleteLastCLLL(CLLL ** manager);
|
||||
void DeleteAfterCLLL(CLLL * ptr_before);
|
||||
void DeleteEndCLLL(CLLL ** manager);
|
||||
// --------------------------------- CDLLL -----------------------------------------------
|
||||
void InsertLastCDLLL(CDLLL ** manager);
|
||||
void InsertAfterCDLLL(CDLLL * ptr_before);
|
||||
void InsertBeforeCDLLL(CDLLL * ptr_after);
|
||||
void InsertEndCDLLL(CDLLL ** manager);
|
||||
void DeleteCDLLL(CDLLL * ptr_cur);
|
||||
void DeleteLastCDLLL(CDLLL ** manager);
|
||||
void PrintCDLLL(CDLLL * manager, void Print(Data_Type dt));
|
||||
// ---------------------------- Sparce Matrix ------------------------------
|
||||
void InitSM(SM ** manager);
|
||||
void AddRowSM(SM * manager);
|
||||
void AddColSM(SM * manager);
|
||||
SM * GetItemSM(SM * manager, int row, int col);
|
||||
SM * FindAbove(SM * ptr_sm);
|
||||
SM * FindBefore(SM * ptr_sm);
|
||||
unsigned int RowsCountSM(SM * manager);
|
||||
unsigned short ColsCountSM(SM * manager);
|
||||
void AddItemSM(SM * manager, int row, int col);
|
||||
void RemoveItemSM(SM * manager, int row, int col);
|
||||
void RemoveColSM(SM * manager);
|
||||
void RemoveRowSM(SM * manager);
|
||||
void PrintIntDataType(Data_Type dt);
|
||||
void PrintSM(SM * manager, void print(Data_Type));
|
||||
BIN
23 - Sort/a.out
Normal file
BIN
23 - Sort/a.out
Normal file
Binary file not shown.
77
23 - Sort/ex1.c
Normal file
77
23 - Sort/ex1.c
Normal file
@@ -0,0 +1,77 @@
|
||||
#include "General.h"
|
||||
|
||||
|
||||
BOOLEAN IntDataTypeIsBigger(Data_Type dt1, Data_Type dt2)
|
||||
{
|
||||
return (dt1.int_ > dt2.int_);
|
||||
}
|
||||
|
||||
void SwapDataType(Data_Type * dt1, Data_Type * dt2)
|
||||
{
|
||||
Data_Type temp = *dt1;
|
||||
*dt1 = *dt2;
|
||||
*dt2 = temp;
|
||||
}
|
||||
|
||||
|
||||
DLLL * Partition(DLLL * low, DLLL * high, BOOLEAN IsBigger(Data_Type dt1, Data_Type dt2), void Swap(Data_Type * dt1, Data_Type * dt2))
|
||||
{
|
||||
DLLL * temp_min = low->prev;
|
||||
DLLL * temp_loop;
|
||||
|
||||
for (temp_loop = low; temp_loop != high; temp_loop = temp_loop->next)
|
||||
{
|
||||
if (IsBigger(high->info, temp_loop->info))
|
||||
{
|
||||
temp_min = (temp_min == NULL) ? low : temp_min->next;
|
||||
|
||||
Swap(&(temp_min->info), &(temp_loop->info));
|
||||
}
|
||||
}
|
||||
temp_min = (temp_min == NULL) ? low : temp_min->next;
|
||||
Swap(&(temp_min->info), &(high->info));
|
||||
return (temp_min);
|
||||
}
|
||||
void QuickSortDLLL(DLLL * low, DLLL * high)
|
||||
{
|
||||
if (high != NULL && low != high && low != high->next)
|
||||
{
|
||||
DLLL * p = Partition(low, high, IntDataTypeIsBigger, SwapDataType);
|
||||
QuickSortDLLL(low, p->prev);
|
||||
QuickSortDLLL(p->next, high);
|
||||
}
|
||||
}
|
||||
|
||||
DLLL * LastDLLL(DLLL * manager)
|
||||
{
|
||||
while (manager->next != NULL)
|
||||
manager = manager->next;
|
||||
return (manager);
|
||||
}
|
||||
|
||||
|
||||
void main(void)
|
||||
{
|
||||
int * seed;
|
||||
DLLL * manager;
|
||||
DLLL * last;
|
||||
InitDLLL(&manager);
|
||||
PushDLLL(&manager);
|
||||
PushDLLL(&manager);
|
||||
PushDLLL(&manager);
|
||||
PushDLLL(&manager);
|
||||
PushDLLL(&manager);
|
||||
PushDLLL(&manager);
|
||||
DLLL * temp = manager;
|
||||
while (temp != NULL)
|
||||
{
|
||||
temp->info.int_ = Random(&seed,0, 10);
|
||||
temp = temp->next;
|
||||
}
|
||||
last = LastDLLL(manager);
|
||||
PrintDLLL(manager, PrintIntDataType);
|
||||
QuickSortDLLL(manager, last);
|
||||
|
||||
PrintDLLL(manager, PrintIntDataType);
|
||||
|
||||
}
|
||||
106
23 - Sort/ex2.c
Normal file
106
23 - Sort/ex2.c
Normal file
@@ -0,0 +1,106 @@
|
||||
#include "General.h"
|
||||
|
||||
BOOLEAN IntDataTypeIsBigger(Data_Type dt1, Data_Type dt2)
|
||||
{
|
||||
return (dt1.int_ >= dt2.int_);
|
||||
}
|
||||
|
||||
void RemoveCDLLL(CDLLL * manager)
|
||||
{
|
||||
while (manager->next != manager)
|
||||
{
|
||||
DeleteCDLLL(manager);
|
||||
}
|
||||
DeleteLastCDLLL(&manager);
|
||||
}
|
||||
|
||||
void MergeCDLLL(CDLLL * manager1, CDLLL * manager2, BOOLEAN IsBigger(Data_Type dt1, Data_Type dt2))
|
||||
{
|
||||
manager2->next->prev = manager1;
|
||||
manager1->next->prev = manager2;
|
||||
manager2->next = manager1;
|
||||
manager1->next = manager2;
|
||||
|
||||
while (IsBigger(manager1->info,manager1->prev->info))
|
||||
{
|
||||
if (IsBigger(manager1->info, manager2->info))
|
||||
{
|
||||
InsertBeforeCDLLL(manager1);
|
||||
manager1->prev->info = manager2->info;
|
||||
manager2 = manager2->next;
|
||||
}
|
||||
else
|
||||
{
|
||||
manager1 = manager1->next;
|
||||
}
|
||||
}
|
||||
RemoveCDLLL(manager2);
|
||||
}
|
||||
|
||||
unsigned int AmountNodesCDLLL(CDLLL * manager)
|
||||
{
|
||||
unsigned int count = ONE;
|
||||
CDLLL * temp = manager->next;
|
||||
while (temp != manager)
|
||||
{
|
||||
count++;
|
||||
temp = temp->next;
|
||||
}
|
||||
|
||||
return (count);
|
||||
}
|
||||
|
||||
void CutCDLLLTwoParts(CDLLL * manager, CDLLL ** second_part)
|
||||
{
|
||||
*second_part = manager;
|
||||
CDLLL * temp = manager;
|
||||
unsigned int counter;
|
||||
unsigned int amount_of_nodes = AmountNodesCDLLL(manager) / TWO;
|
||||
for (counter = ZERO; counter < amount_of_nodes; counter++)
|
||||
{
|
||||
*second_part = (*second_part)->next;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
void MergeSortCDLLL(CDLLL * manager)
|
||||
{
|
||||
CDLLL * half_of_cdlll;
|
||||
if (manager->next != manager)
|
||||
{
|
||||
// cut the CDLLL for two parts <BLACKBOX>
|
||||
MergeSortCDLLL(manager);
|
||||
MergeSortCDLLL(half_of_cdlll);
|
||||
MergeCDLLL(manager, half_of_cdlll, IntDataTypeIsBigger);
|
||||
}
|
||||
}
|
||||
|
||||
void main(void)
|
||||
{
|
||||
CDLLL * manager1;
|
||||
InsertLastCDLLL(&manager1);
|
||||
InsertEndCDLLL(&manager1);
|
||||
InsertEndCDLLL(&manager1);
|
||||
InsertEndCDLLL(&manager1);
|
||||
InsertEndCDLLL(&manager1);
|
||||
InsertEndCDLLL(&manager1);
|
||||
InsertEndCDLLL(&manager1);
|
||||
InsertEndCDLLL(&manager1);
|
||||
|
||||
CDLLL * manager2;
|
||||
InsertLastCDLLL(&manager2);
|
||||
InsertEndCDLLL(&manager2);
|
||||
InsertEndCDLLL(&manager2);
|
||||
InsertEndCDLLL(&manager2);
|
||||
InsertEndCDLLL(&manager2);
|
||||
InsertEndCDLLL(&manager2);
|
||||
InsertEndCDLLL(&manager2);
|
||||
InsertEndCDLLL(&manager2);
|
||||
|
||||
|
||||
int * seed;
|
||||
CDLLL * temp = manager1->next;
|
||||
|
||||
PrintCDLLL(manager1, PrintIntDataType);
|
||||
}
|
||||
27
23 - Sort/shell.c
Normal file
27
23 - Sort/shell.c
Normal file
@@ -0,0 +1,27 @@
|
||||
#include "General.h"
|
||||
|
||||
void ShellSort(int * arr, int size, void Swap(int * num1, int * num2))
|
||||
{
|
||||
int gap;
|
||||
int temp;
|
||||
unsigned int counter;
|
||||
if (size != ONE) // fix
|
||||
{
|
||||
gap = size / TWO;
|
||||
temp = arr[gap];
|
||||
for (counter = ZERO; counter < gap; counter += TWO)
|
||||
{
|
||||
if (temp < arr[counter])
|
||||
{
|
||||
Swap(&(arr[gap]), &(arr[counter]));
|
||||
}
|
||||
}
|
||||
|
||||
ShellSort(arr, size, Swap);
|
||||
}
|
||||
}
|
||||
|
||||
void main(void)
|
||||
{
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user