본문 바로가기

프로그래밍 언어들/C

C언어 2중 포인터를 이용한 스택(stack)

#include <stdio.h>

#include <malloc.h>


typedef struct node

{

int data;

struct node *prv;

}NODE;


NODE* createnode( int); // create a node in Hip realm

void delNode( NODE **); // delete a node positioned on top of stack

void addNode( NODE **, int); // add a node on top of stack

void insertNode( NODE **, int, int); // insert a node between two nodes


int main( void)

{

NODE *top = NULL;


addNode( &top, 10);

addNode( &top, 20);

addNode( &top, 30);

addNode( &top, 40);


insertNode( &top, 70, 2);

insertNode( &top, 80, 2);

}


NODE* createnode( int data)

{

NODE *temp = ( NODE*)malloc( sizeof( NODE));


(*temp).data = data;


(*temp).prv = NULL;


return temp; // return an address of new node in Hip

}


void delNode( NODE **top)

{

NODE *temp = *top;


// No one exist

if( *top == NULL)

{

return;

}


// Let Top pointer point previous node

*top = (*(*top)).prv;


// release memory in Hip realm

free(temp);

}


void addNode( NODE **top, int data)

{

NODE *temp = createnode( data);


// No one exist

if( *top == NULL)

{

*top = temp;

}

else // one or more node exist

{

(*temp).prv = *top;

*top = temp;

}

}


void insertNode( NODE **top, int data, int pos)

{

NODE *temp;

int swap = 0;


// selected position is not available

if( *top == NULL)

{

return;

}


if( pos == 1)

{

temp = createnode( data);


// insert a new node to pertinent position

(*temp).prv = (*(*top)).prv;


(*(*top)).prv = temp;


// switch new data and previous data

swap = (*(*top)).data;


(*(*top)).data = (*temp).data;


(*temp).data = swap;

}

else

{

// search a position for inserting

insertNode( &((*(*top)).prv), data, pos - 1);

}

}