Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Gap Buffer | Deletion Operation

  • Last Updated : 07 Aug, 2019


We have discussed Gap buffer and insert operations. In this post, delete operation is discussed. When we want to delete a character these three cases may arise.

  • Characters to be deleted is at cursor position: Let’s assume we want to delete “FOR” from “FORGEEKS”, since the cursor (gap_left) is at desired position the character is deleted i.e. the gap takes the character inside itself and the character gets deleted.

  • Characters to be deleted is left of cursor position: For this case since “FOR” is left to the cursor position we must reach to the desired position by using left() as in previous article. Now, we can delete “FOR” as in case 1.

    Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

    In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

  • Characters to be deleted is right of cursor position: For this case also the cursor position is right to the desired position we must reach there by using right() as in previous article. Now, we can delete “FOR” as in case 1.

Implementing Gap Buffer with Deletion




// C++ program of implementation
// of gap buffer with Deletion
  
#include <bits/stdc++.h>
using namespace std;
  
char buffer[50];
int gap_size = 10;
int gap_left = 0;
int gap_right = gap_size - gap_left - 1;
int size = 10;
  
// Function that is used to grow the gap
// at index position and return the array
  
void grow(int k, int position)
{
  
    char a[size];
  
    // Copy characters of buffer to a[]
    // after position
    for (int i = position; i < size; i++) {
        a[i - position] = buffer[i];
    }
  
    // Insert a gap of k from index position
    // gap is being represented by '-'
    for (int i = 0; i < k; i++) {
        buffer[i + position] = '_';
    }
  
    // Reinsert the remaining array
    for (int i = 0; i < position + k; i++) {
        buffer[position + k + i] = a[i];
    }
  
    size += k;
    gap_right += k;
}
  
// Function that is used to move the gap
// left in the array
void left(int position)
{
    // Move the gap left character by character
    // and the buffers
    while (position < gap_left) {
        gap_left--;
        gap_right--;
        buffer[gap_right + 1] = buffer[gap_left];
        buffer[gap_left] = '_';
    }
}
  
// Function that is used to move the gap
// right in the array
void right(int position)
{
    // Move the gap right character by character
    // and the buffers
    while (position > gap_left) {
        gap_left++;
        gap_right++;
        buffer[gap_left - 1] = buffer[gap_right];
        buffer[gap_right] = '_';
    }
}
  
// Function to control the movement of gap
// by checking its position to the point of
// insertion
void move_cursor(int position)
{
    if (position < gap_left) {
        left(position);
    }
    else {
        right(position);
    }
}
  
// Function to insert the string to the buffer
// at point position
void insert(string input, int position)
{
    int len = input.length();
    int i = 0;
  
    // If the point is not the gap check
    // and move the cursor to that point
    if (position != gap_left) {
        move_cursor(position);
    }
  
    // Insert characters one by one
    while (i < len) {
        // If the gap is empty grow the size
        if (gap_right == gap_left) {
            int k = 10;
            grow(k, position);
        }
  
        // Insert the character in the gap and
        // move the gap
        buffer[gap_left] = input[i];
        gap_left++;
        i++;
        position++;
    }
}
  
// Function to delete the character buffer
// at point position
void deleetion(int position)
{
    // If the point is not the gap check
    // and move the cursor to that point
    if (position + 1 != gap_left) {
        move_cursor(position + 1);
    }
  
    // Reduce the gap_left
    gap_left -= 1;
    buffer[gap_left] = '_';
}
  
// Driver code
int main()
{
    // Initializing the gap buffer with size 10
    for (int i = 0; i < 10; i++) {
        buffer[i] = '_';
    }
  
    cout << "Initializing the gap buffer "
         << "with size 10" << endl;
  
    for (int i = 0; i < size; i++) {
        cout << buffer[i] << " ";
    }
  
    cout << endl;
  
    // Inserting a string to buffer
    string input = "GEEKSGEEKS";
    int position = 0;
  
    insert(input, position);
  
    cout << endl;
    cout << "Inserting a string to buffer"
         << ": GEEKSGEEKS" << endl;
    cout << "Output: ";
    for (int i = 0; i < size; i++) {
        cout << buffer[i] << " ";
    }
  
    input = "FOR";
    position = 5;
  
    // Inserting a string to buffer
    insert(input, position);
  
    cout << endl;
    cout << endl;
  
    cout << "Inserting a string to buffer"
         << ": FOR" << endl;
    cout << "Output: ";
    for (int i = 0; i < size; i++) {
        cout << buffer[i] << " ";
    }
  
    position = 5;
  
    // Deletion a character from buffer
    deleetion(position);
  
    cout << endl;
    cout << endl;
  
    cout << "Deleting character at position 5"
         << endl;
    cout << "Output: ";
    for (int i = 0; i < size; i++) {
        cout << buffer[i] << " ";
    }
  
    position = 6;
  
    // Deletion a character from buffer
    deleetion(position);
  
    cout << endl;
    cout << endl;
  
    cout << "Deleting character at position 6"
         << endl;
    cout << "Output: ";
    for (int i = 0; i < size; i++) {
        cout << buffer[i] << " ";
    }
  
    position = 5;
  
    // Deletion a character from buffer
    deleetion(position);
  
    cout << endl;
    cout << endl;
  
    cout << "Deleting character at position 5"
         << endl;
    cout << "Output: ";
    for (int i = 0; i < size; i++) {
        cout << buffer[i] << " ";
    }
  
    input = "HELLO";
    position = 0;
  
    // Inserting a string to buffer
    insert(input, position);
  
    cout << endl;
    cout << endl;
  
    cout << "Inserting a string to buffer"
         << ": HELLO" << endl;
    cout << "Output: ";
    for (int i = 0; i < size; i++) {
        cout << buffer[i] << " ";
    }
  
    return 0;
}
Output:
Initializing the gap buffer with size 10
_ _ _ _ _ _ _ _ _ _ 

Inserting a string to buffer: GEEKSGEEKS
Output: G E E K S G E E K S _ _ _ _ _ _ _ _ _ _ 

Inserting a string to buffer: FOR
Output: G E E K S F O R _ _ _ _ _ _ _ G E E K S 

Deleting character at position 5
Output: G E E K S _ _ _ _ _ _ _ _ O R G E E K S 

Deleting character at position 6
Output: G E E K S O _ _ _ _ _ _ _ _ _ G E E K S 

Deleting character at position 5
Output: G E E K S _ _ _ _ _ _ _ _ _ _ G E E K S 

Inserting a string to buffer: HELLO
Output: H E L L O _ _ _ _ _ G E E K S G E E K S



My Personal Notes arrow_drop_up
Recommended Articles
Page :