darkflammme 2018-02-08 11:10 采纳率: 100%
浏览 944
已采纳

关于栈的Top操作的问题 c语言实现 链表实现 数据结构

头文件
struct Node{
int data;
struct Node *Next;
};
typedef struct Node *PtrToNode;
typedef PtrToNode Stack;

int IsEmpty(Stack S);
void MakeEmpty(Stack S);
Stack CreateStack(void);
void Push(int X,Stack S);
int Top(Stack S);
void Pop(Stack S);

#include
#include "stack.h"
#include

int IsEmpty(Stack S)
{
return S->Next == NULL;
}

void MakeEmpty(Stack S)
{
if(S == NULL)
printf("must");
else
while(!IsEmpty(S))
Pop(S);
}

Stack CreateStack(void)
{
Stack S;

S = malloc(sizeof(struct Node));
if(S == NULL)
    printf("Out of range");
S->Next = NULL;
MakeEmpty(S);
return S;

}

void Push(int X,Stack S)
{
PtrToNode TmpCell;

TmpCell = malloc(sizeof(struct Node));
if(TmpCell == NULL)
    printf("Out of range");
else
{
   TmpCell->data = X;
   TmpCell->Next = S->Next;
   S->Next = TmpCell;

}

}

int Top(Stack S)
{
if(!IsEmpty(S))
return S->Next->data;
printf("Out of range");
return 0;
}

void Pop(Stack S)
{
PtrToNode FirstCell;

if(IsEmpty(S))
    printf("Out of range");
else
{
    FirstCell = S->Next;
    S->Next = S->Next->Next;
    free(FirstCell);

}

}

这个基本上是照书一点一点打的,我不太懂关于Top操作
为什么知道了指向栈底部的指针S就可以用
S->Next->data 得知栈顶元素,这个我自己实验过是对的。
因为假如这个栈是由3个链表连起来的,S->Next->data应该得到的是第二个链表里面的元素啊。
S->Next->Next->data才是栈顶的元素。
我也曾怀疑过是不是Push操作改变了指针S指向的地方。。但打印出的S的地址都是一样啊。
顺便可以问一下,假如我要打印某个地址 是应该 用 %d 吗,我的文本编辑器总报warning。。
提一下我的文本编辑器是geany 编译器是gcc Linux下
我是小白。。求指教啊啊啊啊。。google后也不明白。。卡了好几天了
希望有人可以帮我一下..

  • 写回答

2条回答 默认 最新

  • wtf178 2018-02-08 12:04
    关注

    S不是栈顶,S是栈顶的上面,S->Next指向的才是栈顶,你画个图就知道了,不要把S当做一个节点,S是个指针,不是一个节点,
    是个Next指向栈顶的节点指针,S里面的data没用,就那个Next有用
    所以S-Next->data是栈顶元素
    push是在栈顶上面加的,所以,push实际上是加载了S和旧的栈顶之间,形成了新的栈顶

    打印地址 int 类型,%d可以。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 我想在一个软件里添加一个优惠弹窗,应该怎么写代码
  • ¥15 fluent的在模拟压强时使用希望得到一些建议
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流