用链表模拟栈机制倒序输出字符串

mcmay 2014-06-21 06:01:22
各位达人,下面这个程序用链表模拟栈机制倒序输出字符串,但不知问题在哪,麻烦指教!
// exercise 5, chapter 17

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

typedef char Item;

typedef struct node
{
Item item;
struct node * next;
struct node * prev;
}Node;

typedef struct {
Node * head;
Node * tail;
}Stack;

int main(void)
{
char ch;
Stack stack;
Node * tmp;

stack.head = stack.tail = NULL;
puts("Enter a string:");
while((ch = getchar())!= '\n' && (ch = getchar()) != EOF)
{
tmp = (Node *) malloc(sizeof(Node));
tmp->item = ch;
if(tmp == NULL)
{
fputs("Failed to allocate memory.", stderr);
exit(1);
}
if(stack.head == NULL)
{
stack.head = tmp;
stack.head->prev = NULL; //让第一个元素的前溯指针为NULL
}
else
{
stack.tail->next = tmp;
tmp->prev = stack.tail; //让从第二个元素开始的前溯指针指向前一个元素
}
tmp->next = NULL;
stack.tail = tmp;
}
if(stack.head == NULL)
puts("No string entered.");
else
{
puts("String in reverse:");
tmp = stack.tail;
while(tmp != NULL)
{
putchar(tmp->item);
tmp = tmp->prev;
}
}

puts("\nDone!");
return 0;
}
...全文
142 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
mcmay 2014-06-21
  • 打赏
  • 举报
回复
// exercise 5, chapter 17
 
#include <stdio.h>
#include <stdlib.h>
 
typedef char Item;
 
typedef struct node
{
    Item item;
    struct node * next;
    struct node * prev;
}Node;
 
typedef struct {
    Node * head;
    Node * tail;
}Stack;
 
int main(void)
{
    char ch;
    Stack stack;
    Node * tmp;
 
    stack.head = stack.tail = NULL;
    puts("Enter a string:");
    while((ch = getchar())!= '\n' && (ch = getchar()) != EOF)   //我找到了,是这里出了问题
    {                                                                           //(ch = getchar()) != EOF是多读了字符了
        tmp = (Node *) malloc(sizeof(Node));
        tmp->item = ch;
        if(tmp == NULL)
        {
            fputs("Failed to allocate memory.", stderr);
            exit(1);
        }
        if(stack.head == NULL)
        {
            stack.head = tmp;
            stack.head->prev = NULL;  //让第一个元素的前溯指针为NULL
        }
        else
        {
            stack.tail->next = tmp;
                tmp->prev = stack.tail; //让从第二个元素开始的前溯指针指向前一个元素           
        }
        tmp->next = NULL;
        stack.tail = tmp;
    }
    if(stack.head == NULL)
        puts("No string entered.");
    else
    {
        puts("String in reverse:");
        tmp = stack.tail;
        while(tmp != NULL)
        {
            putchar(tmp->item);
            tmp = tmp->prev;
        }
    }
 
    puts("\nDone!");
    return 0;
}
707wk 2014-06-21
  • 打赏
  • 举报
回复
直接倒序创建链表不就行了吗,要弄这么复杂吗? 倒序创建链表(仅供参考)
typedef struct node
{
	int num;
	struct node *next;
}NODE;
struct node *crfun(int n)
{
	NODE* head=NULL;
	NODE* p;
	while(n)
	{
		p=(NODE*)malloc(sizeof(NODE));
		scanf("%d",&p->num);
		p->next=head;
		head=p;
		n--;
	}
	return p;
}

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧