數據結構C語言實現----清空、銷毀一個棧


代碼如下:

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

typedef struct 
{
    char *base;
    char *top;
    int stacksize;
}sqStack;

//////////////////////////////////////
//創建一個棧
#define STACK_SIZE 100
void initstack(sqStack *stack )
{
    stack->base = (char*)malloc( STACK_SIZE * sizeof(char));
    if (!stack->base)
    {
        exit(0);
    }
    stack->top = stack->base;
    stack->stacksize = STACK_SIZE;
}
////////////////////////////////////
//入棧操作
#define STACK_MORE 10
void Push(sqStack *stack , char c)
{
    if (stack->top - stack->base > stack->stacksize)
    {
        stack->base = (char*)realloc(stack->base , (stack->stacksize + STACK_MORE) * sizeof(char));
        if (!stack->base)
        {
            exit(0);
        }
        
        stack->top = stack->base + stack->stacksize;
        stack->stacksize = stack->stacksize + STACK_MORE;
    }
    *(stack->top) = c;
    stack->top++;
}
//////////////////////////////////////
//出棧操作
void Pop(sqStack *stack , char *c)
{
    if (stack->base == stack->top)
    {
        return;
    }
    *c = *--(stack->top);
}
///////////////////////////////////////
//清空棧
void ClearStack(sqStack *stack)
{
    stack->top = stack->base;
}
//////////////////////////////////////
//銷毀一個棧
void destoryStack(sqStack *stack)
{
    for (size_t i = 0; i < stack->stacksize; i++)
    {
        free(stack->base);
        stack->base++;
    }
    stack->base=stack->top = NULL;
    stack->stacksize = 0;
}


int main()
{
    sqStack stack;
    char c=1;
    printf("請安任意鍵創建一個棧...\n");
    getchar();
    initstack(&stack);
    printf("創建成功!\n");
    printf("請輸入要壓入棧的一個字符串(讀取到0截至): ");
    while ((c = getchar()) != '\n')
    {
        //scanf("%c",&c);
        //fflush(stdin);
        if (c!='\n')
        {
            Push(&stack , c);
        }
    }
    printf("壓入字符完成,正在打印字符串...\n");
    for (size_t i = 0; i < (stack.top - stack.base); i++)
    {
        printf("%c",*(stack.base + i));
    }
    putchar('\n');
    printf("請輸入要彈出幾個字符:");
    int k;
    scanf("%d",&k);
    while (k)
    {
        k--;
        Pop(&stack , &c);
        printf("字符%c已彈出!\n",c);
    }
    printf("彈出字符完成,正在打印字符串...\n");
    for (size_t i = 0; i < (stack.top - stack.base); i++)
    {
        printf("%c",*(stack.base + i));
    }
    putchar('\n');
    printf("接下來你可以選擇清空(輸入1)或者銷毀(輸入2)這個棧:");
    scanf("%d",&k);
    fflush(stdin);
    switch (k)
    {
    case 1:
        ClearStack(&stack);
        if (stack.top == stack.base)
        {
            printf("清空完成!");
        }
        break;
    case 2:
        destoryStack(&stack);
        if(stack.base == NULL && stack.top == NULL && stack.stacksize == 0)
        {
            printf("已成功銷毀!");
        }
        break;
    default:
        break;
    }

    return 0;
}

  

運行結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM