Страница 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
Евгений Александрович
сделал как у Вас. все ровно не то что-то выдает
а куда именно нуна засунусь мою функцию "размер" ?