Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <locale.h>
- typedef struct data{
- int value;
- struct data *next, *prev;
- }person;
- person *head = NULL;
- person *tail = NULL;
- person *current;
- int count=0;
- void addElement();//добавить информацию о элементе
- void addFront();//добавить элемент в начало
- void addNow();
- void addBack();//добавить элемент в конец
- void deleteFront();//удалить первый элемент
- void deleteNow();
- void deleteBack();//удалить последний элемент
- void deleteList();//удалить весь список
- void changeInfo();
- void output();//вывести данные
- void outOverFive();
- void outOverGet();
- void outLivingOnTheStreet();
- void sortingByAge();
- void saveInFile();
- void outFromFile();
- int main()
- {
- int answer, answer2, answer3;
- setlocale(LC_ALL, "");
- while(answer!=0){
- printf("\n--------------------------------------------------------------------------------");
- printf("\nЧто нужно делать?");
- printf("\n1-Добавить элемент\n2-Вывести список\n3-Удаление элемента\n4-Изменить данные");
- printf("\n5-Вывести элементы больше 5\n6-Вывести элементы больше указанного\n7-Вывести живущих на данной улице");
- printf("\n8-Сортировать по возрасту\n9-Записать в файл\n0-Закрыть программу");
- printf("\nВаш выбор: ");
- scanf("%d", &answer);
- switch(answer){
- case 1:
- printf("\nДобавить в: \n1-Начало \n2-В указанное место\n3-В конец\nВаш выбор: ");
- scanf("%d", &answer2);
- switch(answer2){
- case 1:
- addFront();
- break;
- case 2:
- addNow();
- break;
- case 3:
- addBack();
- break;
- }
- break;
- case 2:
- output();
- break;
- case 3:
- printf("\nУдалить: \n1-Первый элемент \n2-Указанный элемент\n3-Последний элемент\n4-Весь список\nВаш выбор: ");
- scanf("%d", &answer3);
- switch(answer3){
- case 1:
- deleteFront();
- break;
- case 2:
- deleteNow();
- break;
- case 3:
- deleteBack();
- break;
- case 4:
- deleteList();
- break;
- }
- case 4:
- break;
- case 5:
- break;
- case 6:
- break;
- case 7:
- break;
- case 8:
- sortingByAge();
- break;
- case 9:
- break;
- case 0:
- return 0;
- }
- }return 0;
- }
- void addElement(){
- current = malloc(sizeof(person));
- printf("\nВведите значение value: ");
- scanf("%d", ¤t -> value);
- }
- void addFront(){//Добавит в начало
- addElement();
- if(head!=NULL){ //Если в списке были элементы
- current -> next = head;
- head -> prev = current;
- head = current;
- }
- else { //Если список пуст
- tail = current;
- head = current;
- }
- count++;
- }
- void addBack(){
- addElement();
- if(tail!=NULL){//Если в списке есть элементы
- current->prev=tail;
- tail->next=current;
- tail=current;
- current->next=NULL;
- }
- else{
- tail=current;
- head=current;
- }
- count++;
- }
- void addNow(){
- int index;
- do {
- printf("\nВведите индекс элемента, который хотите добавить: ");
- scanf("%d", &index);
- if(index<=NULL || index>count+1 && index != 1 && index != count){
- printf("\nИндекс указан неверно. Попробуйте еще раз: ");
- scanf("%d", &index);
- }
- }while(index<=NULL || index>count+1 && index != 1 && index != count);
- if(index==1)
- addFront();
- else if(index==count)
- addBack();
- else{
- person *ptr=head;
- int i=0;
- while(ptr!=NULL){
- i++;
- if(i+1==index){
- addElement();
- current->next=ptr->next;
- ptr->next=current;
- }
- else
- ptr=ptr->next;
- }
- }
- count++;
- }
- void deleteFront(){
- if(head==NULL && tail==NULL)//Если список пустой
- printf("\nСписок пуст. Удалять нечего.\n");
- else if(head == tail) {//Если в списке есть один элемент
- tail = NULL;
- free(head);
- head = NULL;
- }
- else{//Если в списке были элементы
- current = head;
- head = head->next;
- head->prev = NULL;
- free(current);
- }
- count--;
- }
- void deleteNow(){
- int index;
- printf("\nВведите индекс элемента, который хотите удалить: ");
- scanf("%d", &index);
- if(index<=NULL || index>count)
- printf("\nТакого нет.");
- else if(index==1)
- deleteFront();
- else if(index==count)
- deleteBack();
- else{
- person *ptr=head;
- int i=0;
- while(ptr!=NULL){
- i++;
- if(i==index){
- current=ptr->next;
- current->prev=ptr->prev;
- current=ptr->prev;
- current->next=ptr->next;
- free(ptr);
- }
- else
- ptr=ptr->next;
- }
- }
- }
- void deleteBack(){
- if(head==NULL && tail==NULL)//Если список пустой
- printf("\nСписок пуст. Удалять нечего.");
- else if(head == tail) {//Если в списке есть один элемент
- tail = NULL;
- free(head);
- head = NULL;
- }
- else{//Если в списке были элементы
- current = tail;
- tail = tail->prev;
- tail->next = NULL;
- free(current);
- }
- count--;
- }
- void deleteList(){
- while(head!=NULL){//пока не указываем на хвост
- current = head; //создаем временный элемент
- head = head->next; //присваиваем ему указатель на следующий
- free(current); // и удаляем его
- }
- head = NULL;
- count = 0;
- }
- void output(){
- if(head==NULL)
- printf("\nСписок пуст.");
- else{
- printf("\nСписок:\n");
- current=head;
- while(current!=NULL){
- printf("%d ",current -> value);
- current = current->next;
- }
- }
- }
- void sortingByAge(){
- }
- void outOverFive(){
- if(head==NULL)
- printf("\nСписок пуст.\n");
- else{
- printf("\nValue больше 5: ");
- current=head;
- while(current!=NULL){
- if(current->value>5)
- printf("%d ",current -> value);
- current = current->next;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement