Реализация стека на массиве

Июнь 2nd, 2011 § 0 comments

Ну вот это первая (в изучении ) и основная структура данных а именно стек, относится к классу LIFO (Last In First Out). Здесь он реализован на массиве, фиксированного размера. Что избежать ограничения фиксированного размера, стек можно сделать на списке. Ниже приведен исходник.


#include <string.h>
#define SIZE 20
#define STR_SIZE 128

struct stack
{
 char name[SIZE][STR_SIZE];
 int size;
};
void push(stack* pStack, char* value)
{
 if(pStack->size>=SIZE-1)
 {
 printf("Stack is overflow...\n");
 return;
 }
 strcpy(pStack->name[++pStack->size],value);
}
char* pop(stack* pStack)
{
 char* temp= new char[STR_SIZE];
 if(pStack->size==SIZE-1)
 {
 printf("Stack empty...\n");
 return NULL;
 }
 strcpy(temp,pStack->name[pStack->size]);
 strcpy(pStack->name[pStack->size--],"");
 return temp;

}
void print_stack(stack *pStack)
{
 int temp=pStack->size;
 while(!(temp==-1))
 {
 printf("Stack value: %s\n",pStack->name[temp]);
 temp--;
 }

}

int _tmain(int argc, _TCHAR* argv[])
{
 stack mystack;
 char* removed_elem=NULL;
 mystack.size=-1;
 push(&mystack,"First element");
 push(&mystack,"Second element");
 push(&mystack,"Third element");
 push(&mystack,"Fourth element");

 print_stack(&mystack);
 removed_elem=pop(&mystack);
 printf("Removed item %s\n",removed_elem);

 delete[] removed_elem;
 getchar();
 return 0;
}

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Смотреть фильмы онлайн