Here is how we can use a linked list to model a queue in a bank line:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Person person_t;
typedef struct BankLine bank_line_t;
struct Person {
char name[100];
int age;
person_t* next;
};
struct BankLine{
char name[50];
person_t* head;
person_t* tail;
};
bank_line_t create_bank_line(char *name){
bank_line_t new_line;
strcpy(new_line.name,name);
new_line.head = NULL;
new_line.tail = NULL;
return new_line;
}
person_t* create_person(char *name, int age){
person_t* new_person = malloc(sizeof(person_t));
strcpy(new_person->name, name);
new_person->age = age;
new_person->next = NULL;
printf("😁 Someone appeared: %s (%d years old)\n",new_person->name,new_person->age);
return new_person;
}
void add_person_to_line(char *name, int age, bank_line_t* bank_line){
person_t* new_person = create_person(name, age);
if (bank_line->head == NULL) {
bank_line->head = new_person;
printf(" 👆 %s is the first person in the line\n",new_person->name);
}
if (bank_line->tail == NULL) {
bank_line->tail = new_person;
printf(" 👇 %s is the last person in the line\n",new_person->name);
}else{
bank_line->tail->next = new_person;
bank_line->tail = new_person;
printf(" 👇 %s went to the back of the line\n",new_person->name);
}
}
void info(person_t *person){
printf(" 😃 \"My name is %s. I am %d years old. ", person->name, person->age);
if (person->next != NULL){
printf("The person after me is %s\"\n", person->next->name);
}else{
printf("No one comes after me in the line\"\n");
}
}
void bank_line_info(bank_line_t* bank_line){
printf("👀 This bank line is %s\n",bank_line->name);
printf("👀 The person at the head of the line is %s (age %d years)\n",bank_line->head->name,bank_line->head->age);
person_t* current_person = bank_line->head;
while (current_person != NULL){
info(current_person);
current_person = current_person->next;
}
}
void free_bank_line(bank_line_t* bank_line){
printf("👀 Freeing the line \"%s\"\n",bank_line->name);
person_t* current_person = bank_line->head;
while(current_person!=NULL){
person_t* next = current_person->next;
free(current_person);
current_person = next;
}
}
int main(){
bank_line_t rb_line = create_bank_line("Reepooblic Bank Line");
add_person_to_line("David",17,&rb_line);
add_person_to_line("Joash",26,&rb_line);
add_person_to_line("Athaliah",18,&rb_line);
add_person_to_line("Anita",36,&rb_line);
bank_line_info(&rb_line);
free_bank_line(&rb_line);
return 0;
}
bank-line.c Copy