2015-08-20 35 views
-1

您好朋友,這是我的第一篇文章,發佈時可能做錯了,對不起。使用堆棧以相反順序打印字符串時出錯

我想用相反的順序使用堆棧打印字符串。我試圖獲得頂部值進入字符數組的點,我得到該部分錯誤,請幫助。

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

struct StackNode 
{ 
char data; 
struct StackNode* next; 
}; 

struct StackNode* createNode(char data){ 
struct StackNode* stack=(struct StackNode*)malloc(sizeof(struct StackNode)); 
stack->data=data; 
stack->next=NULL; 
return stack; 
} 

void push(struct StackNode** root,char data) 
{ 
struct StackNode* stack=createNode(data); 
stack->next=*root; 
*root=stack; 
} 


char top(struct StackNode** root) 
{ 
return (*root)->data; 
} 
void pop(struct StackNode** root, char c[],int k) 
{ 
int i; 
for(i=0;i<=k;i++) 
{ 
c[i]=top(&root); 
*root=(*root)->next; 
} 
} 

    void print(struct StackNode* root) 
    { 
    while(root!=NULL) 
    { 
    printf("%c",root->data); 
    root=root->next; 
    printf(" "); 
    } 
    printf("\n"); 
    } 

int main() 
{ 
struct StackNode* root=NULL; 
char c[]="Sherry"; 
int k=strlen(c); 
int i; 
for(i=0;i<=k;i++) 
{ 
push(&root,c[i]); 
} 

pop(&root,c,k); 
for(i=0;i<=k;i++) 
{ 
printf("%c",c[i]); 
printf(" "); 
} 




return 0; 
} 

stackreviseLinkedList.c: In function ‘pop’: 
stackreviseLinkedList.c:36:1: warning: passing argument 1 of ‘top’ from incompatible pointer type [enabled by default] 
c[i]=top(&root); 
^ 
stackreviseLinkedList.c:26:6: note: expected ‘struct StackNode **’ but argument is of type ‘struct StackNode ***’ 
char top(struct StackNode** root) 
+0

是'C [1] =頂部(&root);'導致錯誤,你可能需要刪除和操作符如'C'[1] =頂部(根);?。?' – Arun

+0

請更正縮進和狀態哪裏有錯誤的行是 –

+0

@Giorgi他應該迭代_only_,直到他碰到堆棧的底部 –

回答

1

編譯器顯然是這裏指出的錯誤(聲明:除了編譯器錯誤可能有其他的問題,我沒有嘗試運行程序)

c[i]=top(&root); is the culprit 

應該

c[i]=top(root); // no & required 

看線#36

stackreviseLinkedList.c: In function ‘pop’: 
stackreviseLinkedList.c:36:1: warning: passing argument 1 of ‘top’ from incompatible pointer type [enabled by default] 
c[i]=top(&root); 
^ 
stackreviseLinkedList.c:26:6: note: expected ‘struct StackNode **’ but argument is of type ‘struct StackNode ***’ 
char top(struct StackNode** root) 
+0

H阿倫感謝您的幫助,並且它的工作 – Singh

+0

請考慮@M Oehm的評論上面,更多指針更多的問題:)) – Arun

+0

@Singh:in 'main',''root'是一個'struct StackNode *',所以你需要把它的地址獲得一個'struct StackNode **'。在'pop'中,'root'已經是一個'Stack StackNode **',所以你可以按照原樣傳遞給'top' - 它是'top'和'pop'中'main'中局部變量的指針'。 –

0

失敗,你的主要問題是:

行:

c[i]=top(&root); 

應該是:不傷害你的權利,但現在只是不好的編程

c[i]=top(root); 

其他問題:

  • pop()應該只處理一個字符,應該是對稱的推
  • 你有內存泄漏。您應該將StackNode放在一個臨時指針中,更改根指針,然後釋放StackNode
  • 正如我所評論的,縮進。它有助於發現編碼問題。