LAB SDA N2 Revenko Ivan-1
LAB SDA N2 Revenko Ivan-1
RAPORT
la lucrarea de laborator nr.2
la Structuri de date și algoritme
Chişinău 2022
Scopul lucrării
Scopul lucrării este de a familiariza studentul cu mecanismul de creare a listeleor simplu înlățuite
și operații elementare asupra acestuia, utilizînd pentru aceasta limbajul C.
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node *next;
};
void reverse_list() {
Node *previous = NULL;
Node *current = head;
Node *next = NULL;
while (current != NULL) {
next = current->next;
current->next = previous;
previous = current;
current = next;
}
head = previous;
}
void sort_list() {
if (head == NULL || head->next == NULL) {
return;
}
int swapped;
Node *current;
Node *last = NULL;
do {
swapped = 0;
current = head;
while (current->next != last) {
if (current->data > current->next->data) {
int temp = current->data;
current->data = current->next->data;
current->next->data = temp;
swapped = 1;
}
current = current->next;
}
last = current;
} while (swapped);
}
void print_list() {
if (head == NULL)
{
printf("List is empty!\n");
return;
}
printf("List elements:\n");
Node *current = head;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
void free_list() {
Node *current = head;
Node *next = NULL;
while (current != NULL) {
next = current->next;
free(current);
current = next;
}
head = NULL;
}
void clear_input_buffer() {
int c;
while ((c = getchar()) != '\n' && c != EOF) { }
}
int main() {
int choice, data, position, value;
do {
printf("\n");
printf("1. Read list from keyboard\n");
printf("2. Print list\n");
printf("3. Find element position\n");
printf("4. Free list\n");
printf("5. Sort list\n");
printf("6. Insert element at end\n");
printf("7. Insert element at beginning\n");
printf("8. Insert element at position\n");
printf("9. Delete element from position\n");
printf("10. Reverse list\n");
printf("11. Clear input buffer\n");
printf("12. Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("Enter list elements (-1 to stop):\n");
do {
scanf("%d", &data);
if (data != -1) {
insert_at_end(data);
}
} while (data != -1);
break;
case 2:
print_list();
break;
case 3:
printf("Enter value to search: ");
scanf("%d", &value);
position = find_position(value);
if (position != -1) {
printf("Element found at position %d\n", position);
} else {
printf("Element not found\n");
}
break;
case 4:
free_list();
break;
case 5:
sort_list();
printf("List sorted\n");
break;
case 6:
printf("Enter element to insert at end: ");
scanf("%d", &data);
insert_at_end(data);
break;
case 7:
printf("Enter element to insert at beginning: ");
scanf("%d", &data);
insert_at_beginning(data);
break;
case 8:
printf("Enter position to insert element: ");
scanf("%d", &position);
printf("Enter element to insert: ");
scanf("%d", &data);
insert_at_position(data, position);
break;
case 9:
printf("Enter position to delete element: ");
scanf("%d", &position);
delete_at_position(position);
break;
case 10:
reverse_list();
printf("List reversed\n");
break;
case 11:
clear_input_buffer();
break;
case 12:
printf("Exiting program\n");
break;
default:
printf("Invalid choice, try again\n");
}
} while (choice != 12);
return 0;
}
Concluzie