帮别人做作业, 用c语言实现一个字符stack

程序要实现的效果如下图

 

 

实现代码:

 

#include <stdio.h>
#include <stdlib.h>

void reverse(char ar[], int n)
{
    char c;
    int i = 0;
    for ( i = 0; i <= n ; i++){
        c = ar[i];
        ar[i] = ar[n];
        ar[n] = c;
        n--;}

}


int main(void){

    int sizeOfStack,i,iUserChoice;
    char *str;
    char cPush,cPop;

    printf("Enter the amount of character to be input :");

    scanf("%d", &sizeOfStack);

    str = (char*)realloc(NULL, sizeof(char)*sizeOfStack);
    
    for(i =0;i<sizeOfStack;i++)
    {
        printf("\rEnter the character to be pushed : ");
        scanf(" %c", &str[i]);
    }

    //add end char to tail 
    str[sizeOfStack]='\0';

    
    // reverse array  
    reverse(str,sizeOfStack-1);

    
    //printf("the final array is :%s\n", str);


    while(1)
    {
        printf( "1.Push an element on the stack\n"
          "2.Pop an element from the stack\n"
        "3.Display the top element\n"
        "4.Display all stack element\n"
        "5.Display size of the stack\n"
        "6.Display the final stack and its reversed version\n"
        "7.quit\n"
        );


        printf("Enter your choice :");
        scanf(" %d", &iUserChoice);

        switch (iUserChoice) {
            case 1:    
                printf("\rEnter the element to be pushed : ");
                scanf(" %c", &cPush);

                // re allocate array size
                str = (char*)realloc(str, sizeof(char)*(sizeOfStack+1));
                 
                for(i=sizeOfStack+1;i>0;i--)
                    str[i]=str[i-1];
                str[0]=cPush;
                str[sizeOfStack+1]='\0';

                sizeOfStack=sizeOfStack+1;


                //printf("the final array is :%s\n", str);


                break;

            case 2:    
                printf("\rpop element is : ");
                scanf(" %c", &cPop);
                for(i=0;i<sizeOfStack;i++)
                    str[i]=str[i+1];
        
                sizeOfStack=sizeOfStack-1;

                //printf("the final array is :%s\n", str);

                break;

            case 3: 
                printf("\relement at the top is:%c",str[0]);
                printf("\n");
                break;

            case 4: 
                printf("\rstack is:\n");
                for(i=0;i<sizeOfStack;i++)
                {
                    printf("%c     ",str[i]);
                }
                printf("\n");

                break;
            case 5:
                printf("\rsize of stack is:%d",sizeOfStack);
                printf("\n");
                break;

            case 6:
                printf("\rthe initial stack is:\n");
                for(i=0;i<sizeOfStack;i++)
                {
                    printf("%c     ",str[i]);
                }
                printf("\n");


                printf("\rthe final stack is:\n");
                for(i=sizeOfStack-1;i>=0;i--)
                {
                    printf("%c     ",str[i]);
                }
                printf("\n");
                break;

            case 7:    
                exit(0);

        }

    }
    return 0;
}

 

要点 : 

用  realloc 函数重新分配数组大小

读取单个字符时, 注意前面加空格   scanf(" %d", &iUserChoice);

 

编译方法 :   Linux  :  gcc -o Source Source.c

      windows :   cl Source.c

 

posted on 2018-03-15 12:35  齐文宣  阅读(436)  评论(0)    收藏  举报

导航