Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Операции над структурой данных двухсвязнный список.
- 1) Начать работу
- 2) сделать список пустым
- 3) список пуст не пуст
- 4) установить указатель на начало списка
- 5) установить указатель в конец списка
- 6) проверка: указатель в начале списка?
- 7) проверка: указатель в конце списка?
- 8) передвинуть указатель списка вперёд
- 9) передвинуть указатель списка назад
- 10) показать значения элемента списка до указателя
- 11) показать значения элемента списка после указателя
- 12) удалить элемент списка до указателя
- 13) удалить элемент списка после указателя
- 14) взять элемент списка до указателя
- 15) взять элемент списка после указателя
- 16) изменить значение элемента списка до указателя
- 17) изменить значение элемента списка после указателя
- 18) добавить элемент до указателя
- 19) добавить элемент после указателя
- 20) распечатать список
- 21) закончить работу со списком
- В пустом списке указателя начала списка, конец списка, рабочий указатель существуют и их значения равны нулю.
- При выполнении всех операций кроме 8 и 9 рабочий указатель остаётся на месте.
- Задание:
- нужно написать программу которая реализует выполнение операций с двухсвязнным списком и после выполнения каждой
- операции на экране распечатывается список прямом и обратных направления с указанием места нахождения
- рабочего указателя.*/
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct list list;
- struct list
- {
- int field;
- struct list *next;
- struct list *prev;
- };
- struct list * init(int a)
- {
- struct list *lst;
- lst = (list*)malloc(sizeof(list));
- lst->field = a;
- lst->next = NULL;
- lst->prev = NULL;
- return(lst);
- }
- list* CreatNew() {
- int c;
- list *new;
- new = (list*)malloc(sizeof(list));
- if (new == NULL) {
- printf("new == NULL\n");
- return NULL;
- }
- printf("input elem: ");
- scanf("%d", &c);
- new->next = NULL;
- new->field = c;
- return new;
- }
- list* CreatElem(list *tmp, list **head, list *new) {
- if(head == NULL) {
- printf("error");
- return 0;
- }
- if(!*head) {
- *head = new;
- tmp = *head;
- } else {
- new->next = tmp->next;
- tmp->next = new;
- tmp = tmp->next;
- }
- return tmp;
- }
- list* PrintList(list *head) {
- list *tmp;
- if (head == NULL) {
- printf("Your list is empty!\n");
- return 0;
- }
- tmp = head;
- while (tmp != NULL) {
- if (tmp->next == NULL) {
- printf("%c", tmp->field);
- printf(" ");
- return tmp;
- } else {
- printf("%c", tmp->field);
- tmp = tmp->next;
- }
- }
- }
- int main()
- {
- int score = 0;
- int start = 0;
- int answer = 1;
- list *head = NULL;
- list *tail = NULL;
- list *tmp = NULL;
- while(answer) {
- printf("\n 1 - start work with list\n");
- printf(" 2 - list to null\n");
- printf(" 3 - list is null?\n");
- printf(" 4 - pointer to head\n");
- printf(" 5 - is pointer at the end of list?\n");
- printf(" 6 - check: pointer at the top of the list?\n");
- printf(" 7 - check: pointer at the end of the list?\n");
- printf(" 8 - move the list pointer forward\n");
- printf(" 9 - move the list pointer back\n");
- printf("10 - show list item values before pointer\n");
- printf("11 - show list item values after pointer\n");
- printf("12 - delete list item before pointer\n");
- printf("13 - remove list item after pointer\n");
- printf("14 - take list item to pointer\n");
- printf("15 - take list item after pointer\n");
- printf("16 - change the value of a list item to a pointer\n");
- printf("17 - change the value of the list item after the pointer\n");
- printf("18 - add item before pointer\n");
- printf("19 - add item after pointer\n");
- printf("20 - print list\n");
- printf("21 - finish work with list\n");
- printf("22 - add element\n");
- scanf("%d", &answer);
- switch (answer) {
- case 1: {
- start = 1;
- printf("\n The program began work \n");
- break;
- }
- case 2: {
- if(!start)
- {printf("\n start the program at the beginning\n");
- break;}
- break;
- }
- case 3: {
- if(!start)
- {printf("\n start the program at the beginning\n");}
- break;
- }
- case 4: {
- if(!start)
- {printf("\n start the program at the beginning\n");}
- break;
- }
- case 5: {
- if(!start)
- {printf("\n start the program at the beginning\n");}
- break;
- }
- case 6: {
- if(!start)
- {printf("\n start the program at the beginning\n");}
- break;
- }
- case 7: {
- if(!start)
- {printf("\n start the program at the beginning\n");}
- break;
- }
- case 8: {
- if(!start)
- {printf("\n start the program at the beginning\n");}
- break;
- }
- case 9: {
- if(!start)
- {printf("\n start the program at the beginning\n");}
- break;
- }
- case 10: {
- if(!start)
- {printf("\n start the program at the beginning\n");}
- break;
- }
- case 11: {
- if(!start)
- {printf("\n start the program at the beginning\n");}
- break;
- }
- case 12: {
- if(!start)
- {printf("\n start the program at the beginning\n");}
- break;
- }
- case 13: {
- if(!start)
- {printf("\n start the program at the beginning\n");}
- break;
- }
- case 14: {
- if(!start)
- {printf("\n start the program at the beginning\n");}
- break;
- }
- case 15: {
- if(!start)
- {printf("\n start the program at the beginning\n");}
- break;
- }
- case 16: {
- if(!start)
- {printf("\n start the program at the beginning\n");}
- break;
- }
- case 17: {
- if(!start)
- {printf("\n start the program at the beginning\n");}
- break;
- }
- case 18: {
- if(!start)
- {printf("\n start the program at the beginning\n");}
- break;
- }
- case 19: {
- if(!start)
- {printf("\n start the program at the beginning\n");}
- break;
- }
- case 20: {
- if(!start)
- {printf("\n start the program at the beginning\n");
- break;}
- if(tmp == NULL) {
- printf("your list is empty");
- break;
- }
- tmp = PrintList(head);
- break;
- }
- case 21: {
- if(!start)
- {printf("\n start the program at the beginning\n");}
- break;
- }
- case 22: {
- if(!start)
- {printf("\n start the program at the beginning\n");
- break;}
- score = score+1;
- tmp = CreatElem(tmp, &head, CreatNew());
- break;
- }
- case 23: {
- if(!start)
- {printf("\n start the program at the beginning \n");
- printf( "number of elements in a singly linked list: %d\n", score);
- break;}
- printf( "number of elements in a singly linked list: %d\n", score);
- break;
- }
- default :{
- break;
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement