當前位置:編程學習大全網 - 編程語言 - 我想實現入棧的順序為12345,出棧的順序為54321,棧頂元素為5,這個程序有點問題,請妳幫忙指導壹下好嗎?

我想實現入棧的順序為12345,出棧的順序為54321,棧頂元素為5,這個程序有點問題,請妳幫忙指導壹下好嗎?

改好了,測試壹下吧,改的好辛苦,呵呵

#include<stdlib.h>

#include<stdio.h>

#define OK 1

#define ERROR 0

#define TRUE 1

#define FALSE 0

typedef int SElemType;

typedef int Status;

typedef struct StackNode

{

SElemType data;

struct StackNode *next;

}StackNode,*LinkStack;

LinkStack S; //這裏S是全局變量,後面的代碼就不要再傳這個變量了,S會壹直指向棧頭

//而且,也不要再定義同名的S變量了,大家都犯相同的錯誤!!

//局部變量定義與全局變量名相同,兩個變量會互相影響的,讓程序無所適從,編程者也迷糊

//棧的初始化

void InitStack(void)

{

S=NULL; //妳這裏申請壹個局部變量p沒用啊,刪掉!!

}

//判棧空

Status StackEmpty(LinkStack S)

{

if(S==NULL) return OK;

else return ERROR;

}

//進棧

void LinkStack_Push(SElemType &e)

{

LinkStack p;

p=(LinkStack)malloc(sizeof(LinkStack));

p->data=e;

p->next=S;

S=p;

}

//退棧

void LinkStack_Pop()

{

if( S )

{

LinkStack p;

printf(" %d", S->data ); //加個空格,這樣數據有間隔,看起來舒服點

p=S;

S=S->next;

free(p);

}

}

//取棧頂元素

Status GetLinkStackTop(SElemType &e) //這裏返回取數狀態比較好,因為e為引用,可以直接帶回數據值

{

if(S==NULL) return ERROR;

e = S->data;

return OK ;

}

int main()

{

int i,num;

SElemType n;

InitStack();

//進棧

printf("請輸入要進棧元素的個數:");

scanf("%d",&num);

printf("進棧順序為:");

for(i=0;i<num;i++)

{

scanf("%d",&n);

LinkStack_Push(n);

}

GetLinkStackTop(n);

printf("棧頂元素:%d\n",n);

//退棧

printf("出棧結果為\n"); //這裏多了個%d,因為妳沒參數

while(S)

{

LinkStack_Pop();

}

return 0;

}

  • 上一篇:媽媽的成長故事
  • 下一篇:java與其他web開發編程語言的比較
  • copyright 2024編程學習大全網