Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <stdbool.h>
- #define stringlength 255//Змінна яка вказує довжину стрічки
- typedef struct PhoneStruct {//структура з полями номеру телефону на вказівниками на наступний і попередній елемент списку
- int id;//номер елементу
- char *name;//імя
- char *number;//номер телефону
- struct PhoneStruct *next;//вказівник на наступний елемент
- struct PhoneStruct *prev;//вказівник на попередній елемент
- } Phone;
- Phone* last = NULL;//Вказівник на останній елемент стеку
- int PhonesCounter = 0;//Лічильник елементів в стеку
- void PrintPhone(){//функція для виводу всіх елеменьів списку
- Phone *Current=last;//вказівник на поточний елемент
- if(Current==NULL){//якщо список пустий то виходимо
- return;
- }
- while(Current!=NULL){//доки вказівник на поточний елемент не вказує в нікуда
- printf("\n------%d------",Current->id);//виводимо номер елемента
- printf("\nName: %s",Current->name);//виводимо імя
- printf("\nNumber: %s",Current->number);//виводимо номер телефону
- Current=Current->prev;//присвоюємо вказівнику на поточний елемент адресу попереднього елемента тому що ми йдемо з кінця
- }
- }
- void AddPhone(){//функція додавання елементу в список
- Phone *new = malloc(sizeof(Phone));//виділяємо память під новий елемент і робимо вказівник на цей елемент
- PhonesCounter++;//збільшуємо лічильник елементів
- new->id=PhonesCounter;//встановлюємо номер нового елементу рівним лічильнику бо новий елемент вставляється в кінець списку
- new->name = malloc(stringlength* sizeof(char));//виділяємо память під ім'я
- new->number = malloc(stringlength* sizeof(char));//виділяємо память під номер
- printf("Enter name:");
- scanf("%s", new->name);//Зчитуємо імя для нового елементу
- printf("Enter number:");
- scanf("%s",new->number);//Зчитуємо номер для нового елементв
- if(last!=NULL){//якщо вказівник на останній елемент не вказує в нікуди(якщо список не пустий)
- last->next=new;//встановлюємо вказівник на наступний елемент в останнього елемента стеку щоб він вказував на новий елемент
- new->prev=last;//встановлюємо вказівник на попередній елемент нового елемента щоб вказував на останній елемент стеку
- new->next=NULL;//встановлюємо вказівник на наступний елемент нового елемента шоб вказував в нікуди
- last=new;//встановлюєм вказівник на останній елемент стеку щоб вказував на новий елемент
- }else{//якщо список пустий
- new->prev = NULL;//встановлюємо вказівники на наступний і попередній елемент нового елемента щоб вказували в нікуди
- new->next = NULL;
- last = new;//встановлюємо вказівник на останній елемент стекц щоб вказував на новий елемент
- }
- }
- void RemovePhone(){//функція видалення елементу
- int choice;//змінна для вибору користувача
- Phone *Deleted=last;
- PrintPhone();
- printf("\nWhich one you want to delete:");
- scanf("%d",&choice);
- bool found=false;
- if(Deleted==NULL){
- return;
- }
- while(Deleted->id!=choice){
- if(Deleted->prev==NULL){
- break;
- }
- Deleted=Deleted->prev;
- }
- if(Deleted->id!=choice){
- printf("\nNo element with that id!");
- return;
- }
- if(Deleted->prev!=NULL){
- Deleted->prev->next=Deleted->next;
- }else{
- Deleted->next->prev=NULL;
- }
- if(Deleted->next!=NULL){
- Deleted->next->prev=Deleted->prev;
- }else{
- last=Deleted->prev;
- Deleted->prev->next=NULL;
- }
- while(Deleted!=NULL){
- Deleted->id--;
- Deleted=Deleted->next;
- }
- PhonesCounter--;
- }
- int main() {
- setbuf(stdout, 0);
- int choice;
- while(true){
- printf("\n\n---------Menu--------");
- printf("\n1)List phones");
- printf("\n2)Add phone");
- printf("\n3)Remove phone");
- printf("\n4)Exit");
- printf("\nEnter choice:");
- scanf("%d",&choice);
- switch(choice){
- case 1:
- PrintPhone();
- break;
- case 2:
- AddPhone();
- break;
- case 3:
- RemovePhone();
- break;
- case 4:
- return 0;
- default:
- break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement