Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdlib>
- #include <time.h>
- using namespace std;
- struct Element
- {
- int value;
- Element *next = 0;
- };
- struct List
- {
- Element *head = 0;
- Element *tail = 0;
- int elementAmount;
- };
- bool isEmpty(List *list)
- {
- return list->head == 0;
- }
- int randomValue()
- {
- srand(time(NULL));
- return rand()%10+1;
- }
- void addFirstElement(List **list, Element *element)
- {
- (*list)->head = element;
- (*list)->tail = element;
- (*list)->elementAmount++;
- }
- void addElementTop(List **list)
- {
- Element *element = new Element();
- element->value = randomValue();
- if(isEmpty(*list)) {
- addFirstElement(list, element);
- }
- else {
- element->next = (*list)->head;
- (*list)->head = element;
- (*list)->elementAmount++;
- }
- }
- void addElementEnd(List **list)
- {
- Element *element = new Element();
- element->value = randomValue();
- if(isEmpty(*list)) {
- addFirstElement(list, element);
- }
- else {
- (*list)->tail->next = element;
- (*list)->tail = element;
- (*list)->elementAmount++;
- }
- }
- void addElement(List **list)
- {
- Element *element = new Element();
- element->value = randomValue();
- int index;
- cout << "Please specific index to add element before : " ;
- cin >> index;
- if(isEmpty(*list)) {
- addElementTop(list);
- }
- else if(index > ((*list)->elementAmount)) {
- addElementEnd(list);
- }
- else {
- Element *tmpl = new Element();
- tmpl = (*list)->head;
- for(int i = 1; i < index - 1; i ++) {
- tmpl = tmpl->next;
- }
- element->next = tmpl->next;
- tmpl->next = element;
- (*list)->elementAmount++;
- delete tmpl;
- }
- }
- void showFirst(List **list)
- {
- if(isEmpty(*list)) {
- cout << "Sorry, list is empty." << endl;
- }
- else {
- cout << "Top value of list is : " << (*list)->head->value << endl;
- }
- }
- void showLast(List **list)
- {
- if(isEmpty(*list)) {
- cout << "Sorry, list is empty." << endl;
- }
- else {
- cout << "Last value of list is : " << (*list)->tail->value << endl;
- }
- }
- void showList(List **list)
- {
- if(isEmpty(*list)) {
- cout << "Sorry, list is empty." << endl;
- }
- else {
- Element *temporaryElement = (*list)->head;
- while (temporaryElement != 0) {
- cout << temporaryElement->value << endl;
- temporaryElement = temporaryElement->next;
- }
- delete temporaryElement;
- }
- }
- void avarage(List **list)
- {
- if(isEmpty(*list)) {
- cout << "Sorry, list is empty." << endl;
- }
- else {
- Element *temporaryElement = (*list)->head;
- int sum = 0;
- for(int i = 0; i < (*list)->elementAmount; i++) {
- sum = sum + temporaryElement->value;
- temporaryElement = temporaryElement->next;
- }
- delete temporaryElement;
- double average = (double)sum/(double)(*list)->elementAmount;
- cout << "Average of list elements is " << average;
- }
- }
- void removeElementTop(List **list)
- {
- if(isEmpty(*list)) {
- cout << "Sorry, list is empty." << endl;
- }
- else if((*list)->elementAmount > 1) {
- Element *temporaryElement = (*list)->head;
- (*list)->head = (*list)->head->next;
- (*list)->elementAmount--;
- delete temporaryElement;
- }
- else {
- Element *temporaryElement = (*list)->head;
- (*list)->head = 0;
- (*list)->tail = 0;
- (*list)->elementAmount = 0;
- delete temporaryElement;
- }
- }
- void removeElementEnd(List **list)
- {
- if(isEmpty(*list)) {
- cout << "Sorry, list is empty." << endl;
- }
- else if((*list)->elementAmount > 1) {
- Element *temporaryElement = (*list)->head;
- while(temporaryElement->next != 0) {
- if(temporaryElement->next->next == 0) {
- temporaryElement->value = 0;
- (*list)->elementAmount--;
- }
- else {
- temporaryElement = temporaryElement->next;
- }
- }
- }
- else {
- Element *temporaryElement = (*list)->head;
- (*list)->head = 0;
- (*list)->tail = 0;
- (*list)->elementAmount = 0;
- delete temporaryElement;
- }
- }
- void removeElement(List **list)
- {
- if(isEmpty(*list)) {
- cout << "Sorry, list is empty." << endl;
- }
- else {
- int index;
- cout << "Please specific index to add element before : " ;
- cin >> index;
- if(index <= 1) {
- removeElementTop(list);
- }
- else if(index >= (*list)->elementAmount) {
- removeElementEnd(list);
- }
- else {
- Element *tmpl = (*list)->head;
- for(int i = 1; i < index - 1; i ++) {
- tmpl = tmpl->next;
- }
- Element *element = tmpl->next;
- tmpl->next = element->next;
- (*list)->elementAmount--;
- delete element;
- delete tmpl;
- }
- }
- }
- void removeList(List **list)
- {
- while(!isEmpty(*list)) {
- removeElementTop(list);
- }
- }
- void printMenu()
- {
- cout << "*** MENU ***" << endl;
- cout << "1. Check if list is empty" << endl;
- cout << "2. Add element to end of list" << endl;
- cout << "3. Add element to beginning of list" << endl;
- cout << "4. Add element before specific index" << endl;
- cout << "5. Remove element from end of list" << endl;
- cout << "6. Remove element from beginning of list" << endl;
- cout << "7. Remove element from specific index" << endl;
- cout << "8. Get top element from list" << endl;
- cout << "9. Get lase element from list" << endl;
- cout << "10. Count arithmetic average" << endl;
- cout << "11. Show list" << endl;
- cout << "12. Remove list" << endl;
- cout << "13. Exit" << endl;
- }
- int main()
- {
- List *list = new List;
- int choice;
- while(true)
- {
- printMenu();
- cout<<"Your choice : ";
- cin>>choice;
- switch(choice)
- {
- case 1:
- if(isEmpty(list)) {
- cout << "List is empty." << endl;
- }
- break;
- case 2:
- addElementEnd(&list);
- break;
- case 3:
- addElementTop(&list);
- break;
- case 4:
- addElement(&list);
- break;
- case 5:
- removeElementTop(&list);
- break;
- case 6:
- removeElementEnd(&list);
- break;
- case 7:
- removeElement(&list);
- break;
- case 8:
- showFirst(&list);
- break;
- case 9:
- showLast(&list);
- break;
- case 10:
- avarage(&list);
- break;
- case 11:
- showList(&list);
- break;
- case 12:
- removeList(&list);
- break;
- case 13:
- removeList(&list);
- delete list;
- return 0;
- break;
- default:
- cout << "Error something wrong" << endl;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement