回 帖 发 新 帖 刷新版面

主题:数据结构中用栈和队列实现回文数的判断

这写的这个代码,报四个warning,我思考了半天也没有解决,请指点迷津。
代码如下:
#include<malloc.h>
#include<stdio.h>
#define MAXSIZE 100
//定义栈结构体
typedef struct
{
    char str1[MAXSIZE];
    int top;
}Stack, *PStack;

//栈的初始化
PStack Init_Stack(PStack S)
{
    //PStack S;
    S = (PStack)malloc(sizeof(Stack));
    if (S)
    {
        S->top = -1;
    }
    
    return S;
}

//判断栈空
int Empty_Stack(PStack S)
{
    if (S->top == -1)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

//入栈
int Push_Stack(PStack S, char ch)
{
    if (S->top = MAXSIZE-1)
    {
        return 0;//栈满不能入栈
    }
    else
    {
        S->top++;
        S->str1[S->top] = ch;
        return 1;
    }
}

//出栈
char Pop_Stack(PStack S, char ret)
{
    if (Empty_Stack(S))
    {
        return 0;
    }
    else
    {
        ret = S->str1[S->top];
        S->top--;
        return ret;
    }
}

//定义队列结构体
typedef struct
{
    char str2[MAXSIZE];
    int head, tail;
    int length;
}Queue, *PQueue;

//队列初始化
PQueue Init_Queue(PQueue Q)
{
    //PQueue Q;
    Q = (PQueue)malloc(sizeof(Queue));
    if (Q)
    {
        Q->head = Q->tail = 0;
        Q->length = 0;
    }
    
    return Q;
}

//判断队列是否为空
int Empty_Queue(PQueue Q)
{
    if (Q->length == 0)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

//入队
int In_Queue(PQueue Q, char ch)
{
    if (Q->length == MAXSIZE)
    {
        return 0;//队列满不能入队
    }
    else
    {
        Q->tail++;
        Q->str2[Q->tail];
        Q->length++;
        return 1;
    }
}

//出队
char Out_Queue(PQueue Q, char ret)
{
    if (Empty_Queue(Q))
    {
        return 0;
    }
    else
    {
        Q->head++;
        ret = Q->str2[Q->head];
        Q->length--;
        return ret;
    }
}
 
int main()
{
    PStack s;
    PQueue q;
    int i = 0, count;
    char ch, ret1, ret2;
    Init_Stack(s);
    Init_Queue(q);
    printf("Please input a string(0 to end):");
    while ((ch = getchar()) != '@')
    {
        Push_Stack(s, ch);
        In_Queue(q, ch);
    }
    count = q->length;
    while (!Empty_Stack(s) && !Empty_Queue(q))
    {
        if (Pop_Stack(s, ret1) == Out_Queue(q, ret2))
        {
            i++;
        }
    }
    if (i == count)
    {
        printf("AAAA\n");
    }
    else
    {
        printf("BBBB\n");
    }
    return 0;
}

回复列表 (共1个回复)

沙发


出栈有误,应改为:
int Pop_Stack(PStack S, char* ret)
{
    if (Empty_Stack(S))
        return 0;

    *ret = S->str1[S->top];
    S->top--;

    return 1;
}

入队改为:
int In_Queue(PQueue Q, char ch)
{
    if (Q->length == MAXSIZE)
    {
        return 0;//队列满不能入队
    }
    else
    {
        Q->tail=(Q->tail+1)%MAXSIZE;;
        Q->str2[Q->tail]=ch;
        Q->length++;
        return 1;
    }
}

出队改为:
int Out_Queue(PQueue Q, char* ret)
{
    if (Empty_Queue(Q))
    {
        return 0;
    }
    else
    {
        Q->head=(Q->head+1)%MAXSIZE;
        *ret = Q->str2[Q->head];
        Q->length--; 

        return 1;
    }
}

 
  扩大编辑框  缩小编辑框

我来回复

您尚未登录,请登录后再回复。点此登录或注册