Upload files to "/"
This commit is contained in:
commit
043311dfe4
2 files changed
+308
No files matched your search
@@ -0,0 +1,165 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct Node
|
||||||
|
{
|
||||||
|
int val;
|
||||||
|
struct Node *pNext;
|
||||||
|
|
||||||
|
} Node;
|
||||||
|
|
||||||
|
typedef struct UnBoundedInt
|
||||||
|
{
|
||||||
|
int size;
|
||||||
|
Node *pHead;
|
||||||
|
} UnBoundedInt;
|
||||||
|
|
||||||
|
void init_ubI (UnBoundedInt *I)
|
||||||
|
{
|
||||||
|
I->size = 0;
|
||||||
|
I->pHead = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
Node *initNode(int val)
|
||||||
|
{
|
||||||
|
Node *node = (Node *)malloc(sizeof *node);
|
||||||
|
if (node == NULL)
|
||||||
|
exit(0);
|
||||||
|
node->val = val;
|
||||||
|
node->pNext = NULL;
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
int isEmpty(UnBoundedInt *I)
|
||||||
|
{
|
||||||
|
return (I->size == 0 || I->pHead == NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void display(UnBoundedInt *I)
|
||||||
|
{
|
||||||
|
if (I->size == 0)
|
||||||
|
{
|
||||||
|
printf("0");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Node *current = I->pHead;
|
||||||
|
if (current->val == 1)
|
||||||
|
printf("+");
|
||||||
|
else if (current->val == -1)
|
||||||
|
{
|
||||||
|
printf("-");
|
||||||
|
}
|
||||||
|
|
||||||
|
current = current ->pNext;
|
||||||
|
while (current != NULL)
|
||||||
|
{
|
||||||
|
printf("%d",current->val);
|
||||||
|
current = current ->pNext;
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void insert_digit(int new_val, Node * pcurr,UnBoundedInt *I)
|
||||||
|
{
|
||||||
|
Node *newNode = initNode(new_val);
|
||||||
|
if (isEmpty(I))
|
||||||
|
{
|
||||||
|
I->pHead = newNode;
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
newNode->pNext = pcurr->pNext;
|
||||||
|
pcurr->pNext = newNode;
|
||||||
|
I->size++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void insert_d(UnBoundedInt *n,Node *node_before_the_inserting_node,int val)
|
||||||
|
{
|
||||||
|
Node *new = initNode(val);
|
||||||
|
if (n->pHead == NULL){
|
||||||
|
n->pHead = new;
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
new->pNext = node_before_the_inserting_node->pNext;
|
||||||
|
node_before_the_inserting_node->pNext = new;
|
||||||
|
}
|
||||||
|
n->size++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void insert_digit_finale(UnBoundedInt *I, int val, int digit_pos)
|
||||||
|
{
|
||||||
|
Node *new = initNode(val);
|
||||||
|
if (I->pHead == NULL)
|
||||||
|
{
|
||||||
|
I->pHead = new;
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
Node *pcurr = I->pHead;
|
||||||
|
for (int i = 1;i<=digit_pos && pcurr->pNext != NULL;i++)
|
||||||
|
{
|
||||||
|
pcurr = pcurr->pNext;
|
||||||
|
}
|
||||||
|
|
||||||
|
new->pNext = pcurr->pNext;
|
||||||
|
pcurr->pNext = new;
|
||||||
|
}
|
||||||
|
I->size++;
|
||||||
|
display(I);
|
||||||
|
}
|
||||||
|
|
||||||
|
void remove_digit(UnBoundedInt *I, int val)
|
||||||
|
{
|
||||||
|
Node *p = I->pHead;
|
||||||
|
if (p->val == val)
|
||||||
|
{
|
||||||
|
I->pHead = p->pNext;
|
||||||
|
free(p);
|
||||||
|
I->size--;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Node *q = p->pNext;
|
||||||
|
int cnt = 1;
|
||||||
|
while ((p->val != val) && cnt < I->size)
|
||||||
|
{
|
||||||
|
q = p;
|
||||||
|
p = p->pNext;
|
||||||
|
cnt++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p != NULL)
|
||||||
|
{
|
||||||
|
q->pNext = p->pNext;
|
||||||
|
I->size--;
|
||||||
|
free(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Calc_sum(UnBoundedInt *I)
|
||||||
|
{
|
||||||
|
int Sum = 0;
|
||||||
|
Node *current = I->pHead->pNext;
|
||||||
|
|
||||||
|
while (current->pNext != NULL)
|
||||||
|
{ Sum += current->val;
|
||||||
|
current = current->pNext;
|
||||||
|
}
|
||||||
|
Sum += current->val;
|
||||||
|
printf("Sum is: %d",Sum);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
UnBoundedInt *new_num = (UnBoundedInt *)malloc(sizeof(UnBoundedInt));
|
||||||
|
init_ubI(new_num);
|
||||||
|
insert_digit_finale(new_num,1,0);
|
||||||
|
insert_digit_finale(new_num,5,0);
|
||||||
|
insert_digit_finale(new_num,3,1);
|
||||||
|
insert_digit_finale(new_num,7,2);
|
||||||
|
insert_digit_finale(new_num,9,1);
|
||||||
|
Calc_sum(new_num);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@@ -0,0 +1,143 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
typedef struct Car
|
||||||
|
{
|
||||||
|
int id;
|
||||||
|
int passengers;
|
||||||
|
struct Car *nextCar;
|
||||||
|
} Kar;
|
||||||
|
|
||||||
|
Kar *initCar(int id,int passengers)
|
||||||
|
{
|
||||||
|
Kar *newCar = (Kar*)malloc(sizeof(Kar));
|
||||||
|
newCar->id = id;
|
||||||
|
newCar->passengers = passengers;
|
||||||
|
newCar->nextCar = NULL;
|
||||||
|
return newCar;
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef struct Train
|
||||||
|
{
|
||||||
|
int length;
|
||||||
|
Kar *headCar;
|
||||||
|
|
||||||
|
} ChooChoo;
|
||||||
|
|
||||||
|
void init_new_train(ChooChoo *T)
|
||||||
|
{
|
||||||
|
T-> length = 0;
|
||||||
|
T -> headCar = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int isTrain_without_Car(ChooChoo *T)
|
||||||
|
{
|
||||||
|
return (T->length == 0 || T->headCar == NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
int addCar(ChooChoo *T,Kar *newCar,int newcarPos)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (isTrain_without_Car(T))
|
||||||
|
{
|
||||||
|
T->headCar = newCar;
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
Kar *currCar = T->headCar;
|
||||||
|
for (int i=0;i<=newcarPos && currCar->nextCar != NULL;i++)
|
||||||
|
{
|
||||||
|
currCar = currCar->nextCar;
|
||||||
|
}
|
||||||
|
|
||||||
|
newCar->nextCar = currCar->nextCar;
|
||||||
|
currCar->nextCar = newCar;
|
||||||
|
}
|
||||||
|
T->length++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void display_all_info(int train_or_car,ChooChoo *T)
|
||||||
|
{
|
||||||
|
if (train_or_car == 0)
|
||||||
|
printf("Train's length is %d \n",T->length);
|
||||||
|
else if (train_or_car == 1)
|
||||||
|
{ Kar *currCar = T->headCar;
|
||||||
|
for (int i=0; i <= T->length && currCar != NULL;i++)
|
||||||
|
{
|
||||||
|
printf("Car with the id of %d has %d passenger(s) is in position: %d \n",currCar->id,currCar->passengers, i);
|
||||||
|
currCar = currCar->nextCar;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PegThisCarOut(int id,ChooChoo *T)
|
||||||
|
{
|
||||||
|
Kar *currCar = T->headCar;
|
||||||
|
if (currCar->id == id)
|
||||||
|
{
|
||||||
|
T->headCar = currCar->nextCar;
|
||||||
|
free(currCar);
|
||||||
|
T->length--;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Kar *idkCar = currCar;
|
||||||
|
int cnt = 1;
|
||||||
|
while ((currCar->id != id) && cnt < T->length)
|
||||||
|
{
|
||||||
|
idkCar = currCar;
|
||||||
|
currCar = currCar->nextCar;
|
||||||
|
cnt++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (currCar != NULL)
|
||||||
|
{
|
||||||
|
idkCar->nextCar = currCar->nextCar;
|
||||||
|
T->length--;
|
||||||
|
free(currCar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void removePassenger(int id,ChooChoo *T,int passenger_to_remove)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (isTrain_without_Car(T))
|
||||||
|
{ printf("Car not found man");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Kar *currCar = T->headCar;
|
||||||
|
while (currCar->nextCar != NULL && currCar->id != id)
|
||||||
|
currCar = currCar->nextCar;
|
||||||
|
|
||||||
|
|
||||||
|
if (currCar->id == id)
|
||||||
|
{ if (currCar->passengers - passenger_to_remove > 0)
|
||||||
|
{
|
||||||
|
currCar->passengers -= passenger_to_remove;
|
||||||
|
printf("Car %d now has %d passengers\n",currCar->id,currCar->passengers);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
PegThisCarOut(currCar->id,T);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
ChooChoo *newTrain = (ChooChoo*)malloc(sizeof(ChooChoo));
|
||||||
|
init_new_train(newTrain);
|
||||||
|
addCar(newTrain,initCar(109,54),0);
|
||||||
|
addCar(newTrain,initCar(832,26),1);
|
||||||
|
addCar(newTrain,initCar(371,26),2);
|
||||||
|
//display_all_info(0,newTrain);
|
||||||
|
display_all_info(1,newTrain);
|
||||||
|
printf("\n");
|
||||||
|
removePassenger(832,newTrain,11);
|
||||||
|
display_all_info(1,newTrain);
|
||||||
|
printf("\n");
|
||||||
|
removePassenger(371,newTrain,26);
|
||||||
|
display_all_info(1,newTrain);
|
||||||
|
printf("\n");
|
||||||
|
removePassenger(109,newTrain,55);
|
||||||
|
display_all_info(1,newTrain);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Reference in new issue
Block a user