gpt4 book ai didi

c - 如何分离堆栈中的正数和负数?

转载 作者:行者123 更新时间:2023-11-30 17:34:08 25 4
gpt4 key购买 nike

所以我应该纠正 c 中的一个方法,该方法将堆栈中的所有负数移到顶部。我的计划是将负片和正片分成两个不同的堆栈,然后将它们合并。

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

#define SIZEMAX 10

typedef struct node
{
int data;
struct node* next;
}node;

typedef struct stack
{
node *head;
int stksize;
}stack;

void initialize(stack *stk)
{
stk->head=NULL;
stk->stksize=0;
}

void push(stack *stk,int x)
{
if (stk->stksize==SIZEMAX)
{
printf("stack full");
return;
}

node *temp=(node*)malloc(sizeof(node));
temp->data=x;
temp->next=stk->head;
stk->head=temp;
stk->stksize++;
}

void print(stack *stk)
{
node *temp=stk->head;
while(temp!=NULL)
{
printf("|%d|\n",temp->data);
temp=temp->next;
}
}

void pop(stack *stk)
{
node *temp=(node*)malloc(sizeof(node));
if (stk->stksize==0)
{
printf("nothing to pop");
return;
}

temp->data=stk->head->data;
temp=stk->head->next;
stk->head=temp;
free(temp);
stk->stksize--;
}

void partition(stack *stk)
{
stack negative,positive;

initialize(&negative);
initialize(&positive);
while (stk->stksize!=0)
{
if (stk->head->data<0)
{
push(&negative,stk->head->data);
pop(stk);
}
if (stk->head->data>0)
{
push(&positive,stk->head->data);
pop(stk);
}
}
}

int main()
{
int i,x;
stack mystk;
initialize(&mystk);

for(i=0;i<5;i++)
{
scanf("%d",&x);
push(&mystk,x);
}

print(&mystk);
partition(&mystk);
printf("\n");
print(&mystk);

return(0);
}

在主函数中调用分区函数后,我应该什么也得不到,因为堆栈中的所有内容都被弹出,但我却得到了永无休止的数字链。我无法找出问题所在。

最佳答案

您的问题在于 pop() 函数。它应该看起来像

void pop(stack *stk)
{
if (stk->stksize==0)
{
printf("nothing to pop");
return;
}

node *temp=stk->head->next;
free(stk->head);
stk->head = temp;
stk->stksize--;
}

Live demo

并且不要忘记在 partition() 函数中处理 0。

关于c - 如何分离堆栈中的正数和负数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23485679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com