Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdio.h"
- #include "malloc.h"
- struct data{
- int value;
- struct data *next, *prev;
- }*head, *tail, *current;
- void pushHead(int value){
- struct data *newNode = (struct data*)malloc(sizeof(struct data));
- newNode->value = value;
- newNode->prev = newNode->next = NULL;
- if( head == NULL ){
- head = tail = newNode;
- return;
- }
- newNode->next = head;
- head->prev = newNode;
- head = newNode;
- }
- void pushTail(int value){
- struct data *newNode = (struct data*)malloc(sizeof(struct data));
- newNode->value = value;
- newNode->prev = newNode->next = NULL;
- if( head == NULL ){
- head = tail = newNode;
- return;
- }
- tail->next = newNode;
- newNode->prev = tail;
- tail = newNode;
- }
- void popHead(){
- if( head == NULL )
- return;
- if( head == tail ){
- head = tail = NULL;
- return;
- }
- current = head;
- head = head->next;
- head->prev = NULL;
- free(current);
- }
- void popTail(){
- if( head == NULL )
- return;
- if( head == tail ){
- head = tail = NULL;
- return;
- }
- current = tail;
- tail = tail->prev;
- tail->next = NULL;
- free(current);
- }
- void pushMidByIndex(int index, int value){
- if( head == NULL )
- pushHead(value);
- int dataCounter = 0;
- current = head;
- while( current != NULL ){
- ++dataCounter;
- current = current->next;
- }
- if( index > dataCounter+1 )
- return;
- if( index == 1 )
- pushHead(value);
- else if( index == dataCounter+1 )
- pushTail(value);
- else{
- struct data *newNode = (struct data*)malloc(sizeof(struct data));
- newNode->value = value;
- newNode->prev = newNode->next = NULL;
- dataCounter = 0;
- current = head;
- while( current != NULL ){
- ++dataCounter;
- if( dataCounter == index-1 )
- break;
- current = current->next;
- }
- newNode->next = current->next;
- newNode->prev = current;
- current->next->prev = newNode;
- current->next = newNode;
- }
- }
- void popMidByIndex(int index){
- if( head == NULL )
- return;
- int dataCounter = 0;
- current = head;
- while( current != NULL ){
- ++dataCounter;
- current = current->next;
- }
- if( index > dataCounter )
- return;
- if( index == 1 )
- popHead();
- else if( index == dataCounter )
- popTail();
- else{
- dataCounter = 0;
- current = head;
- while( current != NULL ){
- ++dataCounter;
- if( dataCounter == index )
- break;
- current = current->next;
- }
- current->next->prev = current->prev;
- current->prev->next = current->next;
- current = NULL;
- free(current);
- }
- }
- void viewAllData(){
- if( head == NULL )
- return;
- current = head;
- while( current != NULL ){
- printf("%d ", current->value);
- current = current->next;
- }
- }
- void deleteAllData(){
- while( head != NULL )
- popHead();
- }
- int main(int argc, char **argv){
- pushHead(1);
- viewAllData();
- return 0;
- }
Add Comment
Please, Sign In to add comment