стек символов

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Евгений Александрович
Сообщения: 82
Зарегистрирован: 19 дек 2009, 16:48

(Необходимо создать стек стмволов. Размер стека вводитьс экрана.)
Что не так или как создать стек символов?

Код: Выделить всё

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();
         
}} 
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Не так то, что для каждого элемента стека нужно делать new. А ты делаешь только для первого. Да и всё остальное у тебя тоже неверное - нарисуй на бумажке элементы стека и стрелочки next, которые их связывают, и тогда не запутаешься. Сейчас у тебя поинтеры присваиваются друг другу безо всякой логики.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
rrrFer
Сообщения: 237
Зарегистрирован: 07 сен 2008, 14:15
Контактная информация:

Код: Выделить всё

#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;
}
Приглашаю на свой блог о программировании: pro-prof.com
Евгений Александрович
Сообщения: 82
Зарегистрирован: 19 дек 2009, 16:48

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

Код: Выделить всё

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);
}
Аватара пользователя
rrrFer
Сообщения: 237
Зарегистрирован: 07 сен 2008, 14:15
Контактная информация:

Евгений Александрович по идее размер ограничен только обьемом оперативной памяти+файла подкачки.Сформулируйте нормально что вам надо.
Приглашаю на свой блог о программировании: pro-prof.com
Евгений Александрович
Сообщения: 82
Зарегистрирован: 19 дек 2009, 16:48

Создать стек для символов. Максимальный размер стека вводится с экрана. Создать функции для ввода, вывода и определения размера стека.
Аватара пользователя
rrrFer
Сообщения: 237
Зарегистрирован: 07 сен 2008, 14:15
Контактная информация:

Код: Выделить всё

int razmer(){
	int n;
    printf("ramer\n");
    scanf("%d",&n);
	return n;
}
Хотя вы настойчиво используете глобальные переменные - можно тогда

Код: Выделить всё

int razmer(){
    printf("ramer\n");
    scanf("%d",&n);
}
Приглашаю на свой блог о программировании: pro-prof.com
Евгений Александрович
Сообщения: 82
Зарегистрирован: 19 дек 2009, 16:48

а почему ж неработает то :(
Аватара пользователя
rrrFer
Сообщения: 237
Зарегистрирован: 07 сен 2008, 14:15
Контактная информация:

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;
    }
}
Приглашаю на свой блог о программировании: pro-prof.com
Евгений Александрович
Сообщения: 82
Зарегистрирован: 19 дек 2009, 16:48

сделал как у Вас. все ровно не то что-то выдает
а куда именно нуна засунусь мою функцию "размер" ?
Ответить