Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <stdio.h>
- #include <conio.h>
- #include "locale.h"
- #include <stdlib.h>
- #include "windows.h"
- #pragma warning(disable: 4996)
- typedef struct node
- {
- int day;
- char month[10];
- int year;
- char weekday[10];//поле данных
- node *next;
- }day;
- day *start = NULL, *p ;
- int temp = 0;
- void menu();
- void first_create();
- void add_nodes();
- int deleting();
- void print_data();
- int main()
- {
- setlocale(LC_ALL, "russian_russia.1251");
- menu();
- }
- void menu()
- {
- while (1){
- system("cls");
- int choise = 0;
- printf("|------------Меню------------|\n");
- printf("1. Формирование первого узла списка\n");
- printf("2. Вставка новых узлов с упорядочением по ключу\n");
- printf("3. Удаление узла с заданным ключем\n");
- printf("4. Вывод данных списка на экран\n");
- printf("5. Завершение работы программы\n");
- printf("Пожалуйста введите операцию:\n");
- scanf_s("%d", &choise);
- printf("Вы ввели %d\n", choise);
- Sleep(1000);
- switch (choise){
- case 1: first_create();
- break;
- case 2: add_nodes();
- break;
- case 3: deleting();
- break;
- case 4: print_data();
- break;
- case 5: exit(0);
- }
- }
- }
- //Формирование первого узла списка
- void first_create()
- {
- if (temp == 0)
- {
- p = (day *)malloc(sizeof(day));//выделяем динамическую память под первый узел
- system("cls");
- printf("Введите информацию\n");
- printf("Введите день(число):\n");
- scanf_s("%d", &p->day);
- printf("Введите месяЦ:\n");
- fflush(stdin);
- gets(p->month);
- printf("Введите год:\n");
- scanf_s("%d", &p->year);
- printf("Введите день недели:\n");
- fflush(stdin);
- gets(p->weekday); //заполняем поле данных
- p->next = NULL;
- //заполняем поле указателя на следующий узел
- start = p; //инициализируем указатель на начало списка
- temp = 1;
- }
- else if (temp != 0)
- {
- printf("Первый узел уже существует!");
- getch();
- }
- }
- //Вставка новых узлов с упорядочением по ключу
- void add_nodes()
- {
- if (temp == 1){
- int size = 0;
- printf("Пожалуйста введите количество узлов:\n");
- scanf_s("%d", &size);
- printf("Вы ввели %d\n", size);
- for (int i = 0; i < size; i++)
- {
- p = (day *)malloc(sizeof(day));//выделяем динамическую память под первый узел
- system("cls");
- printf("Введите информацию\n");
- printf("Введите день(число):\n");
- scanf_s("%d", &p->day);
- printf("Введите месяЦ:\n");
- fflush(stdin);
- gets(p->month);
- printf("Введите год:\n");
- scanf_s("%d", &p->year);
- printf("Введите день недели:\n");
- fflush(stdin);
- gets(p->weekday);
- node *prev = start, *post = start; //определяем и инициализируем указатели на node
- while (post != NULL)
- {
- if (post->day > p->day)
- {
- //поместим новый узел между узлами, задаваемыми prev и post
- p->next = post;
- if (post == start)
- start = p; //корректируем указатель на начало списка
- else
- prev->next = p;
- return; //возможный выход из функции
- }
- prev = post;
- post = post->next;
- }
- //поместим новый узел в конец списка
- p->next = NULL;
- prev->next = p;
- }
- printf("Вы ввели список");
- getch();
- }
- if (temp == 0)
- {
- printf("Первый узел еще не существует");
- getch();
- }
- }
- /*node *find(int key){
- if (key != 0)
- {
- while (p != NULL)
- {
- if (p->day == key){
- printf("Ключ существует!");
- getch();
- break;
- }//нашли узел с нужным ключем и выходим из цикла
- p = p->next; //переходим к следующему узлу списка
- }
- return p;
- }
- }*/
- //Удаление узла с заданным ключем
- int deleting(){
- node *pkey, *prev = start, *cur = start->next;
- int key = 0;
- printf("Пожалуйста введите ключ,который хотите удалить:\n");
- scanf_s("%d", &key);
- printf("Вы ввели %d\n", key);//определяем указатель на node
- if (key == start->day){
- pkey = start;
- start = start->next;
- free(pkey);
- }
- else{
- while (cur != NULL && cur->day != key){
- prev = cur;
- cur = cur->next;
- }
- if (cur != NULL)
- {
- pkey = cur;
- prev->next = cur->next;
- free(pkey);
- }
- return 0;//удаление выполнено успешно
- }
- return 1; //удаление не выполнено (нет узла с указанным ключем)
- }
- /*pkey = find(key); //ищем узел по заданному ключу
- if (pkey != NULL)
- {
- //узел с заданным ключем найден
- if (pkey == start){
- start = start->next;//корректируем указатель на начало списка
- printf("was found");
- }
- else
- {
- //поиск узла, предшествующего удаляемому
- node *prev = start; //определяем и инициализируем указатель на node
- while (prev != NULL)
- {
- if (prev->next == pkey)
- break; //нашли предшествующий узел и выходим из цикла
- prev = prev->next; //переходим к следующему узлу списка
- }
- prev->next = pkey->next;
- }
- delete pkey; //освобождаем память из-под удаленного узла
- return 0; //удаление выполнено успешно
- }
- return 1; //удаление не выполнено (нет узла с указанным ключем)
- }*/
- //Вывод данных списка на экран
- void print_data()
- {
- system("cls");
- node *p = start;
- if (p == NULL)
- printf("Список пуст!");
- else{
- printf("Наш список\n");
- printf("---------------------------------------\n");
- printf("|День| Месяц | Год|День недели|\n");
- printf("---------------------------------------\n");
- while (p != NULL)
- {
- printf("|%4d|%15s|%4d|%11s|\n", p->day, p->month, p->year,p->weekday);
- p = p->next;//адресовать следующий элемент списка
- printf("---------------------------------------\n");
- }
- }
- _getch();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement