Write a menu driven program to perform insert and delete operations in a circular linked list


#include
#include
#include
#include
#include

int insbeg(int item);
int inspos(int item);
int insend(int item);
int length();
int delbeg();
int delpos();
int delend();

struct node
{
            int info;
            struct node *link;
};

typedef struct node n1;
n1 *last = NULL;
n1 *currptr, *newnode, *preptr;


class queue
{
            public:
                        create();
                        display();
                        ins();
                        del();
};

queue::create()
{
            char ch;
            newnode = (n1*)malloc(sizeof(n1));
            last = newnode;
            newnode->link = last;
            while (1)
            {
                        cout << "\nEnter the item value :\t" ;
                        cin >> newnode->info;
                        cout << "\nContinue? (y/n) : " ;
                        flushall();
                        cin >> ch;
                        if (ch=='y')
                        {
                                    newnode = new n1;
                                    newnode->link = last->link;
                                    last->link = newnode;
                                    last = newnode;
                        }
                        else
                        {
                                    break;
                        }
            }
            return 0;
}

queue::display()
{
            currptr = last->link;
            if (last==NULL)
            {
                        cout << "\nEmpty list" ;
            }
            else
            {
                        cout << "\nThe list is : \n" ;
                        while (currptr!=last)
                        {
                                    cout << currptr->info;
                                    cout << "--->" ;
                                    currptr = currptr->link;
                        }
                        cout << currptr->info;
                        cout << "--->" ;
                        cout << "NULL" ;
            }
            return 0;
}

queue::ins()
{
            int ch, item;
            cout << "\nEnter the item to insert :\t" ;
            cin >> item;
            newnode = new n1;
            cout << "\n\nChoose any given option : ";
            cout << "\n\t 1. At the beginning" ;
            cout << "\n\t 2. At a position" ;
            cout << "\n\t 3. At the end";
            cout << "\n\nEnter your choice :\t" ;
            cin >> ch;
            switch (ch)
            {
            case 1: insbeg(item);
                                                  break;
            case 2: inspos(item);
                                                  break;
            case 3: insend(item);
                                                  break;
            default: cout << "\nInvalid choice" ;
            }
            display();
            return 0;
}

insbeg(int item)
{
            if (last==NULL)
            {
                        newnode->info = item;
                        last = newnode;
                        last->link = newnode;
            }
            else
            {
                        newnode->info = item;
                        newnode->link = last->link;
                        last->link = newnode;
            }
            return 0;
}

inspos(int item)
{
            int i, pos;
            currptr = last->link;
            cout << "\nEnter the position :\t" ;
            cin >> pos;
            if (pos==-1)
            {
                        insbeg(item);
            }
            else
            {
                        for (i=1 ;i
                        {
                                    currptr = currptr->link;
                        }
                        newnode->link = currptr->link;
                        newnode->info = item;
                        currptr->link = newnode;
            }
            return 0;
}

insend(int item)
{
            newnode->info = item;
            if (last==NULL)
            {
                        last = newnode;
                        newnode->link = last;
            }
            else
            {
                        newnode->link = last->link;
                        last->link = newnode;
                        last = newnode;
            }
            return 0;
}

queue::del()
{
            int cho;
            cout << "\n\nChoose any given option : ";
            cout << "\n\t 1. Delete from beginning" ;
            cout << "\n\t 2. Delete from position" ;
            cout << "\n\t 3. Delete from end";
            cout << "\n\nEnter your choice :\t" ;
            cin >> cho;
            switch (cho)
            {
            case 1: delbeg();
                                                  break;
            case 2: delpos();
                                                  break;
            case 3: delend();
                                                  break;
            default: cout << "\nInvalid choice" ;
            }
            display();
            return 0;
}

delbeg()
{
            currptr =last->link;
            if (last==NULL)
            {
                        cout << "\nEmpty list" ;
            }
            else if (currptr==last)
            {
                        last = NULL;
                        delete currptr;
            }
            else
            {
                        last->link = currptr->link;
                        delete currptr;
            }
            return 0;
}

delpos()
{
            int i, pos;
            cout << "\nEnter the position :\t" ;
            cin >> pos;
            if (pos==1)
            {
                        delbeg();
            }
            else if (pos==length())
            {
                        delend();
            }
            else
            {
                        currptr = last->link;
                        for (i=1 ;i
                        {
                                    preptr = currptr;
                                    currptr = currptr->link;
                        }
                        preptr->link = currptr->link;
                        delete currptr;
            }
            return 0;
}

delend()
{
            currptr =last->link;
            if (last==NULL)
            {
                        cout << "\nEmpty list" ;
            }
            else
            {
                        if (currptr==last)
                        {
                                    last = NULL;
                                    delete currptr;
                        }
                        else
                        {
                                    while (currptr->link!=last)
                                    {
                                                currptr = currptr->link;
                                    }
                                    currptr->link = last->link;
                                    last = currptr;
                        }
            }
            return 0;
}

int length()
{
            int len = 0;
            if (last==NULL)
            {
                        cout << "\nEmpty list" ;
                        return(len);
            }
            else
            {
                        currptr = last->link;
                        while (currptr!=last)
                        {
                                    ++len;
                                    currptr = currptr->link;
                        }
                        return(++len);
            }
}

void main()
{
            queue obj;
            int ch1;
            char ch2;
            clrscr();
            cout << "\nCreate a linked list" ;
            obj.create();
            do
            {
                        cout << "\n\nChoose any given option : " ;
                        cout << "\n\t 1. Insertion" ;
                        cout << "\n\t 2. Deletion" ;
                        cout << "\n\t 3. Length of circular linked list" ;
                        cout << "\n\nEnter your choice :\t" ;
                        cin >> ch1;
                        switch (ch1)
                        {
                        case 1: obj.ins();
                                                              break;
                        case 2: obj.del();
                                                              break;
                        case 3: cout << "\nThe length is :\t" << length();
                                                              break;
                        default: cout << "\n\nInvalid choice" ;
                        }
                        cout << "\n\nDo you want to continue? (y/n) :\t" ;
                        flushall();
                        cin >> ch2;
            }
            while (ch2=='y');
            getch();
}

Comments

Popular posts from this blog

To convert hexadecimal to decimal numbers.

To convert hexadecimal to decimal numbers.