1. 程式人生 > 實用技巧 >資料結構C語言實現----清空、銷燬一個棧

資料結構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;
}

  

執行結果: