-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathstack.cpp
More file actions
134 lines (117 loc) · 2.33 KB
/
stack.cpp
File metadata and controls
134 lines (117 loc) · 2.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/***********************************************************
* stack.cpp: It is a cpp file having stack related functions.
* Authors: CS12B035, CS12B012, CS12B032.
**********************************************************/
#include<iostream>
#include<cstdlib>
#include<new>
using namespace std;
typedef struct tnode TNode;
struct tnode{ //structure tnode is a node of tree
int data; //It has data, 2 TNode*
TNode* left;
TNode* right;
};
typedef struct node Node;
struct node{ //structure node is a node of stack
TNode* address; //It has TNode* and node*
Node* next;
};
typedef struct Stack stack;
struct Stack{
Node* head;
};
TNode* TNode_new();
Node* Node_new();
stack* stack_new();
stack* push(stack* ptr,TNode* val);
stack* pop(stack* temp);
TNode* stack_top(stack* temp,int* error);
void stack_print(stack* ptr);
void stack_delete(stack* ptr);
int stack_size(stack* temp);
TNode* TNode_new() //creates new TNode* and returns it.
{
TNode* temp=new TNode;
temp->left=NULL;
temp->right=NULL;
return temp;
}
Node* Node_new() //creates new Node* and returns it.
{
Node* temp=new Node;
temp->next=NULL;
return temp;
}
stack* stack_new() //creates stack pointer and returns it.
{
stack* temp=new stack;
temp->head=NULL;
return temp;
}
stack* push(stack* ptr,TNode* val) //pushes data on to the stack.
{
if(ptr->head==NULL)
{
ptr->head=Node_new();
ptr->head->address=val;
return ptr;
}
else
{
Node* temp=Node_new();
temp->address=val;
temp->next=ptr->head;
ptr->head=temp;
return ptr;
}
}
stack* pop(stack* temp) //pops elements of stack
{
if(temp->head==NULL)
{
return temp;
}
else
{
temp->head=temp->head->next;
return temp;
}
}
TNode* stack_top(stack* temp,int* error) //Gives top element if stack is not empty
{
if(temp->head==NULL)
*error = 1;
else{
*error = 0;
return temp->head->address;
}
}
void stack_print(stack* ptr) //Prints elements in stack.
{
Node* temp;
temp=ptr->head;
while(temp!=NULL)
{
cout<<temp->address->data<<"\t";
temp=temp->next;
}
}
void stack_delete(stack* ptr) //deletes stack.
{
while(ptr->head!= NULL)
{
ptr=pop(ptr);
}
}
int stack_size(stack* temp) //Gives size of stack.
{
int a=0;
Node* ptr = temp->head;
while(ptr!=NULL)
{
a++;
ptr = ptr->next;
}
return a;
}