Страница 1 из 2
стек символов
Добавлено: 19 мар 2010, 18:31
Евгений Александрович
(Необходимо создать стек стмволов. Размер стека вводитьс экрана.)
Что не так или как создать стек символов?
Код: Выделить всё
struct steck {
char c[10];
struct steck *next;
}*p1,*p2;
static int a,n;
void main(){
p2=NULL;
p1=new(struct steck);
printf("Razmer;"); scanf("%i",&n);
if(n==NULL) printf("error");
else{
for(a=0;a<n;a++)
{
scanf("%s",&p1->c);
p1->next=p2;
p2=p1;
}
printf("Elements:\n");
if(p1!=NULL)
{
printf(" %s",p1->c);
p2=p1->next;
//delete(p1);
p1=p2;
}
getch();
}}
Re: стек символов
Добавлено: 19 мар 2010, 19:37
Romeo
Не так то, что для каждого элемента стека нужно делать new. А ты делаешь только для первого. Да и всё остальное у тебя тоже неверное - нарисуй на бумажке элементы стека и стрелочки next, которые их связывают, и тогда не запутаешься. Сейчас у тебя поинтеры присваиваются друг другу безо всякой логики.
Re: стек символов
Добавлено: 19 мар 2010, 19:43
rrrFer
Код: Выделить всё
#include <conio.h>
#include <stdio.h>
struct stack{
char c[10];
stack *next;
};
int main(){
stack *top,*p1;
int n;
top=0;
printf("Size of stack: ");
scanf("%d",&n);
for(;n;n--){
p1=new stack;
scanf("%s",&p1->c);
p1->next=top;
top=p1;
}
printf("Elements:\n");
p1=top;
while(p1){
printf("%s ",p1->c);
p1=p1->next;
}
getch();
delete(p1);
delete(top);
return 0;
}
Re: стек символов
Добавлено: 21 мар 2010, 15:09
Евгений Александрович
Вроде работает, спс за помощь, но мне нужно еще сообразить функцию для определения мах размера стека, у меня не получается, как это нужно сделать правильно? вот мой код:
Код: Выделить всё
typedef struct stack{
char data;
struct stack *next;
}Item;
Item *top=NULL;
void Push(void);
void Pop(void);
void Display(void);
void razmer(void);
static int n;
int main(){
razmer();
int done=false;
char c;
while(!done){
Display();
printf("\n\nA)dd,D)elete,Q)uit \n");
c=getchar();
switch(toupper(c)){
case 'A':
Push();
break;
case 'D':
Pop();
break;
case 'Q':
done=true;
break;
}
}
return 0;
}
void Push(){
Item *p;
p=(Item *)malloc(sizeof(Item));
for(;n;n--){
printf("Your symbol; ");
scanf("%s",&p->data);
p->next=top;
top=p;
}
}
void Pop(){
Item *p;
if(top!=NULL){
p=top;
top=top->next;
free(p);
}
}
void Display(){
Item *p=top;
if(p==NULL)
printf("\nstack is empty \n");
else
printf("\n\nStack;\n");
while(p!=NULL){
printf("\n%c",p->data);
p=p->next;
}
}
void razmer(){
int n;
printf("ramer\n");
scanf("%i",&n);
Item *p;
p=(Item *)malloc(sizeof(Item));
n=sizeof(Item);
}
Re: стек символов
Добавлено: 21 мар 2010, 17:28
rrrFer
Евгений Александрович по идее размер ограничен только обьемом оперативной памяти+файла подкачки.Сформулируйте нормально что вам надо.
Re: стек символов
Добавлено: 21 мар 2010, 17:55
Евгений Александрович
Создать стек для символов. Максимальный размер стека вводится с экрана. Создать функции для ввода, вывода и определения размера стека.
Re: стек символов
Добавлено: 21 мар 2010, 18:04
rrrFer
Код: Выделить всё
int razmer(){
int n;
printf("ramer\n");
scanf("%d",&n);
return n;
}
Хотя вы настойчиво используете глобальные переменные - можно тогда
Код: Выделить всё
int razmer(){
printf("ramer\n");
scanf("%d",&n);
}
Re: стек символов
Добавлено: 21 мар 2010, 18:35
Евгений Александрович
а почему ж неработает то

Re: стек символов
Добавлено: 21 мар 2010, 20:17
rrrFer
Romeo писал(а):Не так то, что для каждого элемента стека нужно делать new.
Код: Выделить всё
void Push(){
Item *p;
for(;n;n--){
p=(Item *)malloc(sizeof(Item));
printf("Your symbol; ");
scanf("%s",&p->data);
p->next=top;
top=p;
}
}
Re: стек символов
Добавлено: 21 мар 2010, 20:43
Евгений Александрович
сделал как у Вас. все ровно не то что-то выдает
а куда именно нуна засунусь мою функцию "размер" ?