Search This Blog

Simplicity is the ultimate sophistication.” — Leonardo da Vinci
Contact me:

Friday 27 March 2015

Single linked list general implementation, with header node (employee records)

Single linked list general implementation, with header node (employee records)

*  Single linked list general implementation, with header node (employee records)

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <strings.h>
typedef int BOOL; // the more obvious choice would be char, but int is more
                  // time efficient as it uses a basic memory unit optimal for the
                  // particular processor design, by default

struct NODE;
struct EMPLOYEE;
typedef struct EMPLOYEE employee;
typedef struct NODE Node;
typedef Node* PtrNode;
typedef PtrNode List;
typedef PtrNode Position;
typedef employee DataType; // this is a default data type

struct EMPLOYEE{
    char SNo[12];
    char name[50];
    int age;
    char designation[50];
    float salary;

BOOL compareEquality(char* e1, char* e2)
    return (strcmp(e1, e2) == 0);

struct NODE{ // single link list node
    DataType data;
    PtrNode next;

BOOL IsLast(List L, Position pos)
    return (pos->next == NULL);
PtrNode NewList() // returns the List's header
    PtrNode tempNode =  malloc(sizeof(Node));
    tempNode->next = NULL;
    return tempNode;
Position NewNode()
    return malloc(sizeof(Node)); // for old compilers,
    // explicit type conversion like (Node) is needed to be

void Delete(PtrNode node)

void Insert ( List L, DataType data, Position pos)
    Position tempPos;
    tempPos = NewNode(); // creates and allocates memory space
    if(tempPos == NULL)
        fprintf(stderr, "error: request for allocation of memory using function \"malloc\" rejected");
    tempPos->data = data;
    tempPos->next = pos->next;
    pos->next = tempPos;

Position FindPrevious(List L, char element[12]) // by default, this function does not check for the
{                                   // header node which never gets initialised

    Position tempPos = L;
    while(tempPos->next != NULL && !compareEquality(tempPos->next->data.SNo, element)) /// searches for the first occurrence of value 'element'
        tempPos = tempPos->next;
    return tempPos; // returns the node preceding the node containing the value 'element'

void DeleteElement(List L, char data[12])
    Position tempPos = FindPrevious(L, data); // by all chances, this cannot delete the list
    PtrNode tempNode;
    if(IsLast(L, tempPos)) // element not found
    tempNode = tempPos->next;
    tempPos->next = tempNode->next;


Position Find(List L, char element[12])
    Position tempPos = L->next;
    while(tempPos!=NULL && !compareEquality(tempPos->data.SNo,element))
        tempPos = tempPos->next;
    return tempPos; // this return NULL by default when it fails to find the
                    // element

void DisplayElement(DataType element)
   printf("\n\nserial no:%s", element.SNo);
   printf("\nsalary:%f", element.salary);
   printf("\ndesignation:%s", element.designation);
   printf("\nage:%d", element.age);
void Display (List L)
    Position pos = L->next;
    if(pos == NULL)
    while (pos != NULL)
            pos = pos->next;
employee getRecord()
    employee e;
    printf("\n\nserial no:");
    gets(e.SNo);    fflush(stdin);
    gets(;    fflush(stdin);
    scanf("%f", &e.salary);    fflush(stdin);
    gets(e.designation);    fflush(stdin);
    scanf("%d", &e.age);    fflush(stdin);
    return e;
int main()
    printf("employee record manipulation\n");
    List L = NewList();
    Position top = L;
    char data[12];
    char ch = '\0';
    while(ch != '5')
        printf("\n1. enter record");
        printf("\n2. find record");
        printf("\n3. delete record");
        printf("\n4. display all records");
        printf("\n5. exit");
        ch = getch();
        if(ch == '1')
                Insert(L, getRecord(), top);
                top = top->next;
        else if (ch == '2')
                printf("\nenter SNo.");
                DisplayElement(Find(L, data)->data);
        else if(ch=='3')
                printf("\nenter SNo.");
                DeleteElement(L, data);
        else if (ch == '4')
        else if(ch == '5')
            printf("\ninvalid command");

    return 0;

copyright (c) 2015 K Sreram.
About my blog

No comments:

Post a Comment

Featured post

Why increasing complexity is not good?

“ Simplicity is the ultimate sophistication.” — Leonardo da Vinci Why is complicating things wrong ? - K Sr...