IPB

Здравствуйте, гость ( Вход | Регистрация )

> операции над стеком в C, помогите написать правильный код к простой задаче
Matadora
сообщение 4.9.2010, 16:40
Сообщение #1


Школьник
*

Группа: Продвинутые
Сообщений: 16
Регистрация: 4.9.2010
Город: Ukraine
Учебное заведение: ВНТУ
Вы: студент



задали в самом начале учебы после долгого отдыха задачу:
создать программу на С, в которой будут работать функции добавления и удаления следующего элемента стека
вот написала код, но он не хочет работать, помогите плиз
Код

#include<stdio.h>
#include<stdlib.h>
#define MES_LEN 10
typedef struct inform {
            int index;
            char message[MES_LEN];
              } INFORM;
typedef struct list_elem {
                INFORM inform;
                struct list_elem *next;
             } LEL;
LEL* PutInStack(INFORM data);
void PrintList(void);
LEL* GetFromStack(INFORM* pdat);

LEL *list;

int main(void)
{
    LEL *end=NULL;
    puts("\t\t Vhidni dani:");
    do {
        end=PutInStack(end);
       } while (end!=NULL);
    puts("\n\n\t Vvedeno dani v stek:");
    PrintList();
    GetFromStack();
    PrintList();
    return 0;
}

void PrintList(void)
{
    LEL *pel=list;
    while(pel!=NULL)
    {
        printf("\n%-8d%-70s", pel->inform.index, pel->inform.message);
        pel=pel->next;
    }
}

LEL* PutInStack(INFORM data)
{
    LEL *pnew;
    pnew=(LEL*)malloc(sizeof(LEL));
    pnew->inform=data;
    pnew->next=list;
    list=pnew;
    return pnew;
}

LEL* GetFromStack(INFORM* pdat)
{
    LEL *ph=list;
    if (ph==NULL) return NULL;
    *pdat=ph->inform;
    list=list->next;
    free(ph);
    return list;
}





Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
Matadora
сообщение 5.9.2010, 13:22
Сообщение #2


Школьник
*

Группа: Продвинутые
Сообщений: 16
Регистрация: 4.9.2010
Город: Ukraine
Учебное заведение: ВНТУ
Вы: студент



тихо-ша Х) это начало второго курса
мы по лекциям в прошлом году само понятие учили в скольз, но как с ним работать не учили, практических занятий не было
я вот нашла у знакомого такую программку, по ходу оно, зацените

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

struct stackNode
{
int data;
struct stackNode *neatPtr;
};

typedef struct stackNode STACKNODE;
typedef STACKNODE *STACKNODEPTR;

void push (STACKNODEPTR*,int);
int pop (STACKNODEPTR*);
int isEmpty (STACKNODEPTR);
void printStack(STACKNODEPTR);
void instructions(void);

main()
{
STACKNODEPTR stackPtr=NULL;
int choice,value;

instructions();
printf("? ");
scanf("%d",&choice);

while (choice!=3)
{
switch(choice)
{
case 1:
printf("Enter an intager: "); //запихиваем в стех
scanf("%d",&value);
push(&stackPtr,value);
printStack (stackPtr);
break;
case 2: //берем из стека
if (!isEmpty(stackPtr)) printf("The popper value is %d.\n",pop(&stackPtr));
printStack (stackPtr);
break;
default:
printf("Invalid choice.\n\n");
instructions();
break;
}
printf("? ");
scanf("%d",&choice);
}
printf("End of r.\n");
return 0;
}

// Распечатка инструкций
void instructions (void)
{
printf("Enter choice:\n"
"1 to push a value on the stack\n"
"2 to pup a value off the stack\n"
"1 to end program\n"
);
}

// Помещаем в стек
void push (STACKNODEPTR *topPtr,int info)
{
STACKNODEPTR newPtr;

newPtr=malloc(sizeof(STACKNODE));
if (newPtr!=NULL) {
newPtr->data=info;
newPtr->neatPtr=*topPtr;
*topPtr=newPtr;
}
else printf("%d not inserted. No memory available.\n",info);
}

// Берем из стека
int pop (STACKNODEPTR *topPtr)
{
STACKNODEPTR tempPtr;
int popValue;
tempPtr=*topPtr;
popValue=(*topPtr)->data;
*topPtr=(*topPtr)->neatPtr;
free(tempPtr);
return popValue;
}

// распечатка стека
void printStack(STACKNODEPTR currentPtr)
{
if (currentPtr==NULL) printf("The stack is empty.\n\n");
else {
printf("the srack is:\n");
while (currentPtr!=NULL){
printf("%d->",currentPtr->data);
currentPtr=currentPtr->neatPtr;
}
printf("NULL\n\n");
}
}

// пустой ли стек
int isEmpty(STACKNODEPTR topPtr)
{
return topPtr==NULL;
}

Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме
Matadora   операции над стеком в C   4.9.2010, 16:40
Vahappaday   Хм... да много чего неправильного получается, дава...   4.9.2010, 17:21
Matadora   нет, не Волынский, а Винницкий Х) спасибо за сове...   4.9.2010, 17:24
Matadora   будете смеяться, у нас еще не выкладывали материал...   4.9.2010, 17:34
Vahappaday   Это немножко другой стек... Стек на массиве. Стати...   4.9.2010, 17:50
Vahappaday   об указателях понятие дали вам или нет? просто бе...   4.9.2010, 18:48
Matadora   будете смеяться - нам ничего не дали, первые же дн...   4.9.2010, 20:19
Vahappaday   1 курс?!!! ничего не объяснив, сказали...   4.9.2010, 21:31
julia_lisha   да ну на 1 курсе в начале стеки))))) нееее))))))))...   5.9.2010, 9:50
Matadora   тихо-ша Х) это начало второго курса мы по лекциям ...   5.9.2010, 13:22
Vahappaday   Советую сначала понять, зачем оно надо, или хотя б...   5.9.2010, 14:43
Matadora   спасибо за наводку, теперь-то я точно ее сделаю Х)   5.9.2010, 15:04
Matadora   ну словом в предыдущем коде были ошибки, вот прави...   14.9.2010, 18:07
julia_lisha   :thumbsup:   16.9.2010, 12:14
Matadora   знаете как радовалась когда начала работать? ахаха...   17.9.2010, 6:10


Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 28.5.2025, 0:33

Книжки в помощь: "Сборник заданий по высшей математике" Кузнецов Л.А., "Сборник заданий по высшей математике" Чудесенко В.Ф., "Индивидуальные задания по высшей математике" Рябушко А.П., и другие.




Зеркало сайта Решебник.Ру - reshebnik.org.ru