close

前言: 設計2個函數pushK(int stack[], int n, int *top, int k,intdata),popk(int stack[], int *top, int k, int *data)

         完成將一數值push in & pop out 


#include<stdio.h>
#define STACK_SIZE 10


int isStackEmpty(int stack[],int *top);
int isStackFull(int stack[],int n,int *top);
int pushK(int stack[],int n,int *top,int k,int data);
int popK(int stack[],int *top,int k,int *data);
int push(int stack[],int n,int *top,int data);
int pop(int stack[],int *top,int *data);
void printStack(int stack[],int top);


int main(void)
{

int top=8;

int stack[STACK_SIZE]={1,2,4,5,6,7,8,9,10};

int k,stack_data;


printf("Please input a number you want push in\n");

scanf("%d",&stack_data);//insert data


k=3;//push a data at 3rd position

printStack(stack,top);

pushK(stack,STACK_SIZE,&top,k,stack_data);

printStack(stack,top);


k=3;

stack_data=popK(stack,&top,k,&stack_data);

printf("The data is %d\n",stack_data);

printStack(stack,top);

return 0;
}



int pushK(int stack[],int n,int *top,int k,int data)
{

int temp_data,temp_top=-1,temp[STACK_SIZE];


if(*top==n-1){

return(-1);

}else{

while(*top>k-2)

{

pop(stack,top,&temp_data);

push(temp,STACK_SIZE,&temp_top,temp_data);

}

push(stack,STACK_SIZE,top,data);

while(temp_top>=0)

{

pop(temp,&temp_top,&temp_data);

push(stack,STACK_SIZE,top,temp_data);

}

}

return(0);
}



int popK(int stack[],int *top,int k,int *data)
{

int temp_data,temp_top=-1,temp[STACK_SIZE];

int pop_data;


if(*top<k){

return(-1);// no data at this position

}

while(*top>k-1)

{

pop(stack,top,&temp_data);

push(temp,STACK_SIZE,&temp_top,temp_data);

}

pop(stack,top,&temp_data);

pop_data=temp_data;

while(temp_top>=0)

{

pop(temp,&temp_top,&temp_data);

push(stack,STACK_SIZE,top,temp_data);

}

return(pop_data);
}



int push(int stack[],int n,int *top,int data)
{

if(*top<n-1){

*top=*top+1;

stack[*top]=data;

return(1);

}else{

return(0);

}

}

int pop(int stack[],int *top,int *data)
{

if(*top>-1){

*data=stack[*top];

*top=*top-1;

return(1);

}else{

return(0);

}

}


void printStack(int stack[],int top)
{

int index;


for(index=0;index<=top;index++

{

printf("%d ",stack[index]);

}

printf("\n");

}



int isStackEmpty(int stack[],int *top)
{

return((*top==-1)?1:0);

}



int isStackFull(int stack[],int n,int *top)
{

return((*top==n-1)?1:0);

}



arrow
arrow
    全站熱搜
    創作者介紹
    創作者 GavinHuang 的頭像
    GavinHuang

    Gavin的部落格

    GavinHuang 發表在 痞客邦 留言(0) 人氣()