Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c中pop上显示内存地址的堆栈 #包括 #包括 类型定义结构x{ int数据; 结构x*next; }堆叠; int main(){ 栈头; int选择,num; head=NULL; /*功能原型*/ 无效推送(堆栈**头,整数项); int pop(堆栈**头); 内部窥视(堆栈*头部); /*节目*/ 做{ printf(“\n1.Push元素\n2.Pop元素\n3.Peek第一个元素\n4.Exit”); printf(“\n输入您的选择:”); scanf(“%d”,选择(&C); 开关(选择){ 案例1: printf(“\n\n输入要推送的号码:”); scanf(“%d”和&num); 推送(&head,num); 打破 案例2: printf(“%d\n”,弹出(&head)); 打破 案例3: printf(“%d”是顶部元素,\n“,peek(head)); 打破 违约: 系统(“cls”); 打破 } }while(选项!=4); } 无效推送(堆栈**头,整数项){ 堆栈*ptr; ptr=(堆栈*)malloc(sizeof(堆栈)); ptr->data=物料; ptr->next=*头部; *水头=ptr; 免费(ptr); } int pop(堆栈**头){ if(*head==NULL)返回-1; int item=(*head)->数据; *头部=(*头部)->下一个; 退货项目; } 内部窥视(堆栈*头部){ if(head==NULL)返回-1; 返回磁头->数据; }_C_List_Stack - Fatal编程技术网

c中pop上显示内存地址的堆栈 #包括 #包括 类型定义结构x{ int数据; 结构x*next; }堆叠; int main(){ 栈头; int选择,num; head=NULL; /*功能原型*/ 无效推送(堆栈**头,整数项); int pop(堆栈**头); 内部窥视(堆栈*头部); /*节目*/ 做{ printf(“\n1.Push元素\n2.Pop元素\n3.Peek第一个元素\n4.Exit”); printf(“\n输入您的选择:”); scanf(“%d”,选择(&C); 开关(选择){ 案例1: printf(“\n\n输入要推送的号码:”); scanf(“%d”和&num); 推送(&head,num); 打破 案例2: printf(“%d\n”,弹出(&head)); 打破 案例3: printf(“%d”是顶部元素,\n“,peek(head)); 打破 违约: 系统(“cls”); 打破 } }while(选项!=4); } 无效推送(堆栈**头,整数项){ 堆栈*ptr; ptr=(堆栈*)malloc(sizeof(堆栈)); ptr->data=物料; ptr->next=*头部; *水头=ptr; 免费(ptr); } int pop(堆栈**头){ if(*head==NULL)返回-1; int item=(*head)->数据; *头部=(*头部)->下一个; 退货项目; } 内部窥视(堆栈*头部){ if(head==NULL)返回-1; 返回磁头->数据; }

c中pop上显示内存地址的堆栈 #包括 #包括 类型定义结构x{ int数据; 结构x*next; }堆叠; int main(){ 栈头; int选择,num; head=NULL; /*功能原型*/ 无效推送(堆栈**头,整数项); int pop(堆栈**头); 内部窥视(堆栈*头部); /*节目*/ 做{ printf(“\n1.Push元素\n2.Pop元素\n3.Peek第一个元素\n4.Exit”); printf(“\n输入您的选择:”); scanf(“%d”,选择(&C); 开关(选择){ 案例1: printf(“\n\n输入要推送的号码:”); scanf(“%d”和&num); 推送(&head,num); 打破 案例2: printf(“%d\n”,弹出(&head)); 打破 案例3: printf(“%d”是顶部元素,\n“,peek(head)); 打破 违约: 系统(“cls”); 打破 } }while(选项!=4); } 无效推送(堆栈**头,整数项){ 堆栈*ptr; ptr=(堆栈*)malloc(sizeof(堆栈)); ptr->data=物料; ptr->next=*头部; *水头=ptr; 免费(ptr); } int pop(堆栈**头){ if(*head==NULL)返回-1; int item=(*head)->数据; *头部=(*头部)->下一个; 退货项目; } 内部窥视(堆栈*头部){ if(head==NULL)返回-1; 返回磁头->数据; },c,list,stack,C,List,Stack,代码中有什么问题? 每当我弹出或偷看时,都会打印一个内存地址,而不是推送的值。当调用peek时,会显示一个内存地址,当调用pop函数时会弹出该地址,之后每当调用pop函数时,无论我调用该函数多少次,它都会显示不同的内存地址。在代码中找不到问题。请帮助。您正在释放要显示的指针。在推送中,当你们自由(ptr)时,头部指向ptr。所以,基本上你是在解放自己。这意味着任何东西都不会被推到堆栈上。您应该做的是在pop上释放数据,并实现一个函数,在退出时遍历堆栈并释放堆栈中剩余的所有内容。您正在释放要显示的

代码中有什么问题?
每当我弹出或偷看时,都会打印一个内存地址,而不是推送的值。当调用peek时,会显示一个内存地址,当调用pop函数时会弹出该地址,之后每当调用pop函数时,无论我调用该函数多少次,它都会显示不同的内存地址。在代码中找不到问题。请帮助。

您正在释放要显示的指针。在推送中,当你们自由(ptr)时,头部指向ptr。所以,基本上你是在解放自己。这意味着任何东西都不会被推到堆栈上。您应该做的是在pop上释放数据,并实现一个函数,在退出时遍历堆栈并释放堆栈中剩余的所有内容。

您正在释放要显示的指针。在推送中,当你们自由(ptr)时,头部指向ptr。所以,基本上你是在解放自己。这意味着任何东西都不会被推到堆栈上。您应该做的是在pop上释放数据,并实现一个函数,以遍历堆栈,并在退出时释放堆栈中剩余的所有内容。

除了
free
push
中出错(如回答中所述),
free
push中出错之外(如回答中所述)。
#include <stdio.h>
#include <stdlib.h>

typedef struct x {
    int data;
    struct x *next;
} stack;

int main(){
    stack *head;
    int choice, num;
    head = NULL;

    /* function prototypes */
    void push(stack **head, int item);
    int pop(stack **head);
    int peek(stack *head);

    /* program */
    do{
        printf("\n1. Push Element\n2. Pop Element\n3. Peek The First Element\n4. Exit");
        printf("\nEnter your choice: ");
        scanf("%d", &choice);
        switch(choice){
            case 1:
                printf("\n\nEnter the number to be pushed: ");
                scanf("%d", &num);
                push(&head, num);
                break;
            case 2:
                printf("%d\n", pop(&head));
                break;
            case 3:
                printf("%d is the top element\n", peek(head));
                break;
            default:
                system("cls");
                break;
        }
    }while(choice!=4);
}

void push(stack **head, int item){
    stack *ptr;
    ptr = (stack *)malloc(sizeof(stack));
    ptr->data = item;
    ptr->next = *head;
    *head = ptr;
    free(ptr);
}

int pop(stack **head){
    if(*head == NULL) return -1;
    int item = (*head)->data;
    *head = (*head)->next;
    return item;
}

int peek(stack *head){
    if(head == NULL) return -1;
    return head->data;
}