progress on desktop
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
|
||||
typedef struct node {
|
||||
int value;
|
||||
struct node* next;
|
||||
struct node *next;
|
||||
} node;
|
||||
|
||||
typedef struct stackm {
|
||||
@@ -16,63 +16,134 @@ typedef struct stackm {
|
||||
|
||||
|
||||
void smInit(struct stackm *myStack){
|
||||
(myStack->top) = NULL;
|
||||
myStack->top = NULL;
|
||||
}
|
||||
|
||||
|
||||
int smSize(struct stackm *myStack){
|
||||
while(myStack->top->next != NULL) {
|
||||
|
||||
node *current = myStack->top;
|
||||
int count = 0;
|
||||
while(current != NULL) {
|
||||
count++;
|
||||
current = current->next;
|
||||
}
|
||||
return myStack->top;
|
||||
return count;
|
||||
}
|
||||
|
||||
|
||||
int smPush(struct stackm *myStack, int toStore){
|
||||
node node;
|
||||
node.value = toStore;
|
||||
|
||||
*(myStack->top->next) = node;
|
||||
|
||||
node *newNode = (node *)malloc(sizeof(node));
|
||||
if (newNode == NULL) {
|
||||
return 0;
|
||||
} else {
|
||||
newNode->value = toStore;
|
||||
newNode->next = myStack->top;
|
||||
myStack->top = newNode;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int smPop(struct stackm *myStack){
|
||||
|
||||
if(myStack->top == NULL) {
|
||||
return 0;
|
||||
}
|
||||
node *temp = myStack->top;
|
||||
myStack->top = temp->next;
|
||||
free(temp);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
int smTop(struct stackm *myStack, int* toStore){
|
||||
|
||||
if (myStack->top == NULL || toStore == NULL) {
|
||||
return 0;
|
||||
} else {
|
||||
toStore = (int*)myStack->top;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void smClear(struct stackm *myStack){
|
||||
|
||||
while (myStack->top != NULL) {
|
||||
node *temp = myStack->top;
|
||||
myStack->top = temp->next;
|
||||
free(temp);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void smPrint(struct stackm *myStack){
|
||||
|
||||
node *temp = myStack->top;
|
||||
printf("==Stack Contents==\n");
|
||||
printf("Top -> ");
|
||||
while (temp != NULL) {
|
||||
printf("%d ", temp->value);
|
||||
temp = temp->next;
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int smAdd(struct stackm* myStack){
|
||||
|
||||
if(smSize(myStack) <= 2){
|
||||
return 0;
|
||||
} else {
|
||||
int sum = (myStack->top->value) + (myStack->top->next->value);
|
||||
smPush(myStack,sum);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int smSub(struct stackm* myStack){
|
||||
|
||||
if(smSize(myStack) <= 2){
|
||||
return 0;
|
||||
} else {
|
||||
int result = (myStack->top->value) - (myStack->top->next->value);
|
||||
smPop(myStack);
|
||||
smPop(myStack);
|
||||
smPush(myStack,result);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int smMult(struct stackm* myStack){
|
||||
|
||||
if(smSize(myStack) <= 2){
|
||||
return 0;
|
||||
} else {
|
||||
int sum = (myStack->top->value) * (myStack->top->next->value);
|
||||
smPush(myStack,sum);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int smRotate(struct stackm* myStack, int depth){
|
||||
|
||||
if(depth == 0){
|
||||
return 0;
|
||||
} else {
|
||||
node *temp = myStack->top;
|
||||
int count = 1;
|
||||
while (count < depth && temp != NULL) {
|
||||
temp = temp->next;
|
||||
count++;
|
||||
}
|
||||
if (temp == NULL) {
|
||||
return 0;
|
||||
}
|
||||
node *nNode = temp;
|
||||
while (temp->next != NULL) {
|
||||
temp = temp->next;
|
||||
}
|
||||
temp->next = myStack->top;
|
||||
myStack->top = nNode->next;
|
||||
nNode->next = NULL;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user