求大佬帮我看看我设计的栈有什么问题
											程序要求是读取用户输入的字符串,将字符串的字符逐个压入栈,然后从栈中弹出这些字符,即为该字符串的逆序。我仿照课本的链表设计了一个栈,想法是这样的,node节点记录当前字符,上一个node的地址以及下一个node的地址。stack记录链表的开头和结尾,以及项数。
程序在读取字符到栈中没问题,但是在弹出栈时,弹出字符串的最后一个字符就终止程序了。不知道自己的程序有什么问题,求大佬指教。
 程序代码:
程序代码://头文件
#ifndef _STACK_H_
#define _STACK_H_
#include <stdbool.h>
typedef char Item;
typedef struct node
{
    Item item;
    struct node * next;
    struct node * prev;
} Node;
typedef struct stack
{
    Node * front;
    Node * rear;
    int items;
} Stack;
void InitializeStack(Stack * ps);
bool StackIsFull( const Stack * ps);
bool StackIsEmpty(const Stack * ps);
int StackItemCount(const Stack * ps);
bool EnStack(Item item, Stack * ps);
bool Destack(Item *item, Stack * ps);
void EmptyTheStack(Stack * ps);
#endif 程序代码:
程序代码://实现程序
#include <stdio.h>
#include <stdlib.h>
#include "stack.h"
void InitializeStack(Stack * ps)
{
    ps->front = NULL;
    ps->rear = NULL;
    ps->items = 0;
}
bool StackIsFull( const Stack * ps)
{
    Node * pt;
    
    pt = (Node*)malloc(sizeof(Node));
    if(pt == NULL)
    {
        return true;
    }
    else
    {
        return false;
    }
    
    free(pt);
}
bool StackIsEmpty(const Stack * ps)
{
    return ps->items == 0;
}
int StackItemCount(const Stack * ps)
{
    return ps->items;
}
bool EnStack(Item item, Stack * ps)
{
    Node * pnew;
    
    if(StackIsFull(ps))
        return false;
    pnew = (Node*)malloc(sizeof(Node));
    if(pnew == NULL)
    {
        fprintf(stderr, "Unable to allocate memory!\n");
        exit(1);
    }
    pnew->item = item;
    pnew->next = NULL;
    
    if(StackIsEmpty(ps))
    {
        pnew->prev = NULL;
        ps->front = pnew;
        ps->rear = pnew;
    }
    else
    {
        ps->rear->next = pnew;
        ps->rear->prev = ps->rear;
    }
    ps->rear = pnew;
    ps->items++;
    
    return true;
}
bool DeStack(Item *item, Stack * ps)
{
    Node * pt;
    if(StackIsEmpty(ps))
        return false;
    *item = ps->rear->item;
    pt = ps->rear;
    ps->rear = ps->rear->prev;
    free(pt);
    ps->items--;
    if(ps->items == 0)
        ps->rear = NULL;
        
    return true;
}
void EmptyTheStack(Stack * ps)
{
    ps->items = 0;
} 程序代码:
程序代码://测试程序
#include <stdio.h>
#include <string.h>
#include "stack.h"
int main(void)
{
    char st[256];
    char temp;
    int i;
    Stack stch;
    
    puts("请输入一个字符串");
    gets(st);
    InitializeStack(&stch);
    for(i = 0; i < strlen(st); i++)
    {
        if(!StackIsFull(&stch))
        {
            temp = st[i];
            EnStack(temp, &stch);
        }
    }
    printf("%d\n", StackItemCount(&stch));
    while(!StackIsEmpty(&stch))
    {
        DeStack(&temp, &stch);
        putchar(temp);
    }
    putchar('\n');
    EmptyTheStack(&stch);
    
    return 0; 
     
}[此贴子已经被作者于2018-9-30 11:07编辑过]

 
											





 
	    

 
					
				
			 
			 
				
			
		

