Wednesday, 11 January 2017

Special array reversal,reverse the string without affecting the positions of the special characters: C program

Special array reversal
Given a string S, containing special characters and all the alphabets, reverse the string without

affecting the positions of the special characters. 

#include <stdio.h>
#include <string.h>
main()
{
char s[20],temp;
int i=0,j;
gets(s);
j=strlen(s)-1;
while(i<j)
{
if(isalpha(s[i]) && isalpha(s[j]))
{
temp=s[i];
s[i]=s[j];
s[j]=temp;
i++;j--;
}
else if(isalpha(s[i]))
j--;
else
i++;
}
puts(s);
}

Output:

Monday, 9 January 2017

Converting binary to decimal using linked lists: C program

#include <stdio.h>
#include <stdlib.h>
void create();
display();
struct node
{
int data;
struct node *next;
};
struct node *head=NULL,*c,*p,*r;
main()
{
int n,bit,i;
printf("enter the number of bits in the binary number");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("\nenter a bit\n");
scanf("%d",&bit);
create(bit);
}
display();
}
void create(int value)
{
struct node * new = (struct node *)malloc(sizeof(struct node));
new->data = value;
new->next=NULL;
if(head == NULL)
head = new;
else
{
c=head;
while(c->next != NULL)
{
c=c->next;
}
c->next=new;
}
}
display()
{
int dec=0;
if(head == NULL)
printf("list is empty");
else
{
for(c=head;c!=NULL;c=c->next)
{
printf("%d\t",c->data);
dec=dec*2+c->data;
}
printf("\ndecimal equivalent = %d",dec);
}
}

Output:

Write a c program to implement single linked list to print like 5 4 4 3 3 2 2 1 1 0 by taking input as 1 2 3 4 5

#include<stdio.h>
#include <stdlib.h>
struct node
{
int data;
struct node *next;
};
struct node * create(struct node *,int);
display(struct node *);
reverse(struct node *);
main()
{
int n;
struct node *head=NULL;
printf("\nenter a number\n");
scanf("%d",&n);
head=create(head,n);
//display(head);
reverse(head);
}
struct node * create(struct node *q,int n)
{
int i;
struct node *newnode,*c;
for(i=1;i<=n;i++)
{
newnode=(struct node *)malloc(sizeof(struct node));
newnode->data=i;
newnode->next=NULL;
if(q==NULL)
q = newnode;
else
{
c=q;
while(c->next != NULL)
c=c->next;
c->next=newnode;
}
}
return q;
}

display(struct node *p)
{
while(p!=NULL)
{
printf("\t%d\t%d",p->data,p->data-1);
p=p->next;
}
}
reverse(struct node *p)
{
struct node *q,*r;
q=NULL;
while(p != NULL)
{
r=q;
q=p;
p=p->next;
q->next=r;
}
p=q;
display(p);
}

Doubly circular linked list C program

#include <stdio.h>
#include <stdlib.h>
struct node
{
int data;
struct node *next,*back;
};

struct node *head,*c;
deleteend();
deletebeg();
deleteend();
insertmiddle(int);
insertend(int);
insertbeg(int);
display();
create();
main()
{
int n,i,value;
create();
display();
printf("\nenter a value to insert at beginning");
scanf("%d",&value);
insertbeg(value);
display();
printf("\nenter a value to insert");
scanf("%d",&value);
insertmiddle(value);
display();
deletebeg();
printf("\nafter deleting first node\n");
display();
deletemiddle();
printf("\nafter deleting\n");
display();
printf("\nafter deleting last node\n");
deleteend();
display();
}
create()
{
int value,opt;
while(1)
{
printf("Press 1 to continue and Press 0 to stop");
scanf("%d",&opt);
if(opt == 1)
{
printf("\nenter a value");
scanf("%d",&value);
struct node *newnode=(struct node *)malloc(sizeof(struct node));
newnode->data=value;
if(head == NULL)
{
head=newnode;
newnode->next=head;
newnode->back=head;
}
else
{
newnode->next=head;
newnode->back=head->back;
newnode->back->next=newnode;
head->back=newnode;
}
}
else
return;
}
}
insertmiddle(int value)
{
int pos,i=1;
struct node *newnode=(struct node *)malloc(sizeof(struct node));
newnode->data=value;
printf("\nenter the position at which u want to insert\n");
scanf("%d",&pos);
c=head;
while(i<pos)
{

c=c->next;
i++;
}

newnode->next=c;
newnode->back=c->back;
c->back->next=newnode;
c->back=newnode;

}
insertbeg(int value)
{
struct node *newnode=(struct node *)malloc(sizeof(struct node));
newnode->data=value;
if(head == NULL)
{
head=newnode;
newnode->next=head;
newnode->back=head;

}
else
{
newnode->back=head->back;
head->back->next=newnode;
newnode->next=head;
head->back=newnode;
head=newnode;
}
}

deletebeg()
{
c=head;
head->next->back=head->back;
head->back->next=head->next;
head=head->next;
free(c);
}
deletemiddle()
{
int pos,i=1;
printf("\nenter the position at which u want to delete\n");
scanf("%d",&pos);
c=head;
while(i<pos)
{
c=c->next;
i++;
}
c->next->back=c->back;
c->back->next=c->next;
free(c);
}
deleteend()
{
c=head->back;
head->back=head->back->back;
head->back->next=head;
free(c);
}
display()
{
c=head;
if(head==NULL)
{
printf("list is empty");
}
else
{
do
{
printf("%d<->",c->data);
c=c->next;
}while(c!=head);
}
}

Output:

Friday, 6 January 2017

Double Linked List program in exam point of view with different functions

#include <stdio.h>
struct node
{
int data;
struct node *next,*back;
};

struct node *head,*tail,*c;
deleteend();
deletebeg();
deleteend();
insertmiddle(int);
insertend(int);
insertbeg(int);
display();
reverseDisplay();
main()
{
int n,i,value;
create();
display();
printf("\nenter a value to insert at beginning");
scanf("%d",&value);
insertbeg(value);
display();
printf("\nenter a value to insert");
scanf("%d",&value);
insertmiddle(value);
display();
deletebeg();
printf("\nafter deleting first node\n");
display();
deletemiddle();
printf("\nafter deleting\n");
display();
printf("\nafter deleting last node\n");
deleteend();
display();
reverseDisplay();

}
create()
{
int value,opt;
while(1)
{
printf("Press 1 to continue and Press 0 to stop");
scanf("%d",&opt);
if(opt == 1)
{
printf("\nenter a value");
scanf("%d",&value);
struct node *newnode=(struct node *)malloc(sizeof(struct node));
newnode->data=value;
if(head == NULL)
{
newnode->next=NULL;
newnode->back=NULL;
head=tail=newnode;

}
else
{
tail->next=newnode;
newnode->back=tail;
newnode->next=NULL;
tail=newnode;
}
}
else
return;
}
}
insertmiddle(int value)
{
int pos,i=1;
struct node *newnode=(struct node *)malloc(sizeof(struct node));
newnode->data=value;
printf("enter the position at which u want to insert");
scanf("%d",&pos);
c=head;
while(i<pos && c!=NULL)
{

c=c->next;
i++;
}

newnode->next=c;
newnode->back=c->back;
c->back->next=newnode;
c->back=newnode;

}
insertbeg(int value)
{
struct node *newnode=(struct node *)malloc(sizeof(struct node));
newnode->data=value;
if(head == NULL)
{
newnode->next=NULL;
newnode->back=NULL;
head=tail=newnode;

}
else
{
newnode->back=NULL;
newnode->next=head;
head->back=newnode;
head=newnode;
}
}

deletebeg()
{
c=head;
head->next->back=NULL;
head=head->next;
free(c);
}
deletemiddle()
{
int pos,i=1;
printf("enter the position at which u want to delete");
scanf("%d",&pos);
c=head;
while(i<pos)
{
c=c->next;
i++;
}
c->next->back=c->back;
c->back->next=c->next;
free(c);
}
deleteend()
{
c=tail;
tail=tail->back;
tail->next=NULL;
free(c);
}
display()
{
c=head;
if(head==NULL)
{
printf("list is empty");
}
else
{
while(c!=NULL)
{
printf("%d<->",c->data);
c=c->next;
}
}
}
reverseDisplay()
{
printf("\n Values of DDL in reverse order\n");
for(c=tail;c!=NULL;c=c->back)
printf("\t%d\t",c->data);
}


Output:



Wednesday, 4 January 2017

C program to find all substrings of a given string

#include <stdio.h>
#include <string.h>
main()
{
            char name[50];
            int i,j,k,l1;
            gets(name);
            l1=strlen(name);
            for(i=0;i<l1;i++)
            {
                        for(j=0;j<l1;j++)
                        {
                                    for(k=i;k<=j;k++)
                                                printf("%c",name[k]);
                                    printf("\n");
                        }
            }

}