#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);
}
}
'프로그래밍 언어들 > C' 카테고리의 다른 글
2장 - C언어 출력문 (0) | 2016.10.17 |
---|---|
1장 - C언어의 구조 (0) | 2016.10.17 |
이중 포인터를 이용한 tree(트리) 구조 (0) | 2015.09.15 |
이중 포인터를 이용한 큐(queue) (0) | 2015.09.15 |
입력한 수의 회문 구하기 (0) | 2015.03.30 |