Skip to content

Commit 4569a8f

Browse files
initial Commit 🎉
0 parents  commit 4569a8f

27 files changed

+4203
-0
lines changed

ArrayList/Arraylist.cpp

Lines changed: 246 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,246 @@
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

Comments
 (0)