■
■1つのメモリ領域の始端・終端を用いて2つのスタックを実現
データ構造
typedef struct Stack {
int i_size;
int i_idx;
int *p_stack;
} STACK;
1.初期化
int StackInit( STACK *stack_A, STACK *stack_B )
{
printf("スタックのサイズを決定してください。[1-100]");
/* スタックサイズの設定 */
do{
printf(">> ");
scanf("&d", &stack_A->i_size);
if( ( 0 < stack->i_size ) || ( stack->i_size < 101 ) ){
break;
}
printf("入力可能な範囲を超えています。\n");
printf("再度入力してください \n");
}while( 1 );
stack_B->i_size = stack_A->i_size;
/* スタックポインタの設定 */
stack_A->i_idx = 0;
stack_B->i_idx = stack_A->i_size - 1; /* スタックの末端が先頭となる */
/* 動的メモリ領域の確保 */
stack_A->p_stack = calloc( stack_A->i_size, sizeof( int ) );
if( stack_A->p_stack == NULL ){
printf("領域確保に失敗しました\n");
return ( -1 );
}
stack_B->p_stack = &stack_A->p_stack[stack_A->i_size - 1];
/* スタック領域の初期化 */
for( int i = 0; i < stack_A->i_size ; i++ ){
stack_A->p_stack[i] = 0;
}
return ( 0 );
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
構造体一つでスタックを管理できるやんと、
作っている時に気づく。
Push・Popを作って形になったら、再度設計し直してみる。