вы не можете поместить строку в один символ. Вот эта char *C="12345";
строка, но stackitem d;
это char d
, поэтому в void push(POINTER *Top, stackitem a)
эта temp->d = a;
недопустима для полной строки также в void push_string(POINTER *Top,char *string)
вы не можете хранить строку в одном символе. Вы должны послать строку char символом, как показано ниже. Придумайте, если вы хотите, чтобы в вашей структуре был один символ или массив символов, затем напишите свои функции на основе этого.
в вашей функции push_string
tmep
- это POINTER
, поэтому вы не должны выделять для него память в виде строки. Также вы выделяете память только для temp->d
, вы не копируете в нее данные.
в приведенной ниже функции я отправляю символ на push_stirng
(который не нужен, вы можете использовать только push
, но назовите его, как показано ниже в main
):
void push_string(POINTER* Top, char string)
/* Push a string of characters into a stack. */
{
printf("Start inserting the string ...\n");
POINTER temp;
temp = malloc(sizeof(POINTER));
temp->d = (char*)malloc(sizeof(char));
temp->d = string;
temp->next = *Top;
*Top = temp;
printf("Insert element %c\n", temp->d);
}
и назовите его так:
for (int i = 0; C[i] != '\0'; i++)
{
push_string(&top, C[i]);
//also if you want '\0' too after loop you can use this char t='\0';push_string(&top, t);
}
также изменяется при удалении стека, а условие на while (Top1 != NULL)
.