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);
}
}