1
+ #include < iostream>
2
+ using namespace std ;
3
+ #define LIST_INIT_SIZE 2
4
+ #define NULL_VALUE -99999
5
+ #define SUCCESS_VALUE 99999
6
+
7
+
8
+ int listMaxSize;
9
+ int * list;
10
+ int length;
11
+
12
+
13
+ void initializeList ()
14
+ {
15
+ listMaxSize = LIST_INIT_SIZE;
16
+ list = (int *)malloc (sizeof (int )*listMaxSize) ;
17
+ length = 0 ;
18
+ }
19
+ int getLength ()
20
+ {
21
+ return length;
22
+ }
23
+ int searchItem (int item)
24
+ {
25
+ int i = 0 ;
26
+ for (i = 0 ; i < length; i++)
27
+ {
28
+ if ( list[i] == item ) return i;
29
+ }
30
+ return NULL_VALUE;
31
+ }
32
+
33
+ int insertItem (int newitem)
34
+ {
35
+ // /Add Logic to Promote clear()
36
+ if (list==nullptr ){
37
+ initializeList ();
38
+ }
39
+ if (length == listMaxSize)
40
+ {
41
+ int * tempList ;
42
+ // allocate new memory space for tempList
43
+ listMaxSize = 2 * listMaxSize ;
44
+ tempList = (int *) malloc (listMaxSize*sizeof (int )) ;
45
+ int i;
46
+ for ( i = 0 ; i < length ; i++ )
47
+ {
48
+ tempList[i] = list[i] ; // copy all items from list to tempList
49
+ }
50
+ free (list) ; // free the memory allocated before
51
+ list = tempList ; // make list to point to new memory
52
+
53
+
54
+ }
55
+ list[length] = newitem ; // store new item
56
+ length++ ;
57
+ return SUCCESS_VALUE ;
58
+ }
59
+
60
+ int insertItemAt (int pos,int item)
61
+ {
62
+
63
+
64
+ if (pos>=length)
65
+ {
66
+ printf (" Invalid Index!\n " );
67
+ return NULL_VALUE;
68
+ }
69
+
70
+ insertItem (item);
71
+ if (length != 1 ) {// /swap only if
72
+ list[length - 1 ] = list[length - 1 ] ^ list[pos];
73
+ list[pos] = list[length - 1 ] ^ list[pos];
74
+ list[length - 1 ] = list[length - 1 ] ^ list[pos];
75
+ return SUCCESS_VALUE;
76
+ }
77
+
78
+ }
79
+ void shrink ()
80
+ {
81
+ int * tempList ;
82
+ listMaxSize =(int )(0.5 * listMaxSize) ;
83
+ tempList = (int *) malloc (listMaxSize*sizeof (int )) ;
84
+ int i;
85
+ for ( i = 0 ; i < length ; i++ )
86
+ {
87
+ tempList[i] = list[i] ;
88
+ }
89
+ free (list) ;
90
+ list = tempList ;
91
+ }
92
+ int deleteItemAt (int position) // version 2, do not preserve order of items
93
+ {
94
+ if ( position >= length ) return NULL_VALUE;
95
+ list[position] = list[length-1 ] ;
96
+ length-- ;
97
+ if (length<=listMaxSize/2 && length>=LIST_INIT_SIZE)shrink ();
98
+ return SUCCESS_VALUE ;
99
+ }
100
+ void clear ()
101
+ {
102
+ listMaxSize=0 ;
103
+ free (list);
104
+ list=nullptr ;
105
+
106
+ }
107
+ void deleteAll ()
108
+ {
109
+ int * tempList ;
110
+ listMaxSize =LIST_INIT_SIZE ;
111
+ length=0 ;
112
+ tempList = (int *) malloc (listMaxSize*sizeof (int )) ;
113
+ free (list);
114
+ list=tempList;
115
+ }
116
+ int deleteItem (int item)
117
+ {
118
+ int position;
119
+ position = searchItem (item) ;
120
+ if ( position == NULL_VALUE ) return NULL_VALUE;
121
+ deleteItemAt (position) ; // /**which Ensures shrink() to be invoked(if Necessary) since shrink() is Called inside deleteItemAt
122
+ return SUCCESS_VALUE ;
123
+ }
124
+
125
+ int deleteLast ()
126
+ {
127
+ if (length!=0 ) {
128
+ int temp=list[length-1 ];
129
+ deleteItemAt (length - 1 ); // /**which Ensures shrink() to be invoked(if Necessary) since shrink() is Called inside deleteItemAt
130
+ return temp;// /promotes task 7 at ease
131
+ }
132
+ return NULL_VALUE;
133
+ }
134
+ void printList ()
135
+ {
136
+ int i;
137
+ for (i=0 ;i<length;i++)
138
+ printf (" %d " , list[i]);
139
+ printf (" Current size: %d, current length: %d\n " , listMaxSize, length);
140
+ }
141
+
142
+
143
+
144
+ // //Main Function for First 6 Tasks ////
145
+ int main (void )
146
+ {
147
+ initializeList ();
148
+ for (int i=1 ;i<20 ;i=i+2 ,insertItem (i));
149
+ while (1 )
150
+ {
151
+ printf (" 1. Insert new item. 2. Delete item at. 3. Delete item.\n " );
152
+ printf (" 4. Insert New Item at(pos,item). 5. Print. 6.DeleteLast 7.DeleteAll 8.Clear 9.exit \n " );
153
+
154
+ int ch;
155
+ scanf (" %d" ,&ch);
156
+ if (ch==1 )
157
+ {
158
+ int item;
159
+ scanf (" %d" , &item);
160
+ insertItem (item);
161
+ }
162
+ else if (ch==2 )
163
+ {
164
+ int pos;
165
+ scanf (" %d" , &pos);
166
+ deleteItemAt (pos);
167
+ }
168
+ else if (ch==3 )
169
+ {
170
+ int item;
171
+ scanf (" %d" , &item);
172
+ deleteItem (item);
173
+ }
174
+ else if (ch==4 )
175
+ {
176
+ int item,pos;
177
+ scanf (" %d%d" ,&pos,&item);
178
+ insertItemAt (pos,item);
179
+ }
180
+ else if (ch==5 )
181
+ {
182
+ printList ();
183
+ }
184
+ else if (ch==6 )
185
+ {
186
+ deleteLast ();
187
+ }
188
+ else if (ch==7 ) {
189
+ deleteAll ();
190
+ }
191
+ else if (ch==8 )
192
+ {
193
+ clear ();
194
+ }
195
+ else if (ch==9 )
196
+ {
197
+ break ;
198
+ }
199
+ }
200
+
201
+ }
202
+
203
+ // //Main Function for Task 7 ////
204
+ /* int main()
205
+ {
206
+ string s;
207
+ cin>>s;
208
+ int ans=0;
209
+ for(int i=0;i<s.length();i++)
210
+ {
211
+ if(s[i]-'0'>=0 && s[i]-'0'<=9)insertItem(s[i]-'0');
212
+ else
213
+ {
214
+ int temp2=deleteLast();
215
+ int temp1=deleteLast();///temp2 must be taken earlier to maintain '-' or '/' correctly
216
+ if(s[i]=='+')
217
+ {
218
+ ans=temp1+temp2;
219
+ insertItem(ans);
220
+ }
221
+ if(s[i]=='-')
222
+ {
223
+ ans=temp1-temp2;
224
+ insertItem(ans);
225
+ }
226
+ if(s[i]=='*')
227
+ {
228
+ ans=temp1*temp2;
229
+ insertItem(ans);
230
+ }
231
+ if(s[i]=='/')
232
+ {
233
+ if(temp2==0)
234
+ {
235
+ cout<<"Cant Divide by Zero!!"<<endl;
236
+ }
237
+ else {
238
+ ans = temp1 / temp2;
239
+ insertItem(ans);
240
+ }
241
+ }
242
+ }
243
+ }
244
+ cout<<ans;
245
+ }
246
+ */
0 commit comments