2.2堆栈

来源:互联网 发布:java 将字符串格式化 编辑:程序博客网 时间:2024/06/04 04:52

eg.要求一个数组实现两个堆栈,要求最大限度地利用数组空间,使数组只要有空间入栈就可以成功

【分析】 一种比较聪明的方法是使这两个栈分别从数组的两头开始 向中间生长;当两个栈的栈顶指针相遇时,表示两个栈都满了。

#include<stdio.h>#include<stdlib.h>#define MaxSize 100typedef int ElementType;typedef struct Dstack {    ElementType Data[MaxSize];    int Top1;   //堆栈1的栈顶指针    int Top2;   //堆栈2的栈顶指针}S;Dstack S;S.Top1 = -1;S.Top2 = MaxSize;//入栈void Push(struct Dstack *PtrS, ElementType item, int Tag) { //Tag用来标记两个堆栈1和2    if (PtrS->Top2 - PtrS->Top1 == 1) { //两个挨在一起了堆栈就满了        printf("堆栈满\n");        return;    }    if (Tag == 1)        PtrS->Data[++(PtrS->Top1)] = item;    else        PtrS->Data[--(PtrS->Top2)] = item;}//出栈ElementType Pop(struct Dstack *PtrS,int Tag){    if (Tag == 1) {        if (PtrS->Top1 == -1) {            printf("堆栈1空\n");            return NULL;        }        else            return PtrS->Data[(PtrS->Top1)--];    }    else {        if (PtrS->Top2 == MaxSize) {            printf("堆栈2空\n");            return NULL;        }        else            return PtrS->Data[(PtrS->Top2)++];    }}
原创粉丝点击