2014-03-27 2 views
1

이제 며칠 동안 구조체가 들어있는 스택을 만드는 방법에 대해 필자 스스로 죽였다. 처음에 나는 그것이 쉬울 것이라고 생각했다. 그러나 그것은 밝혀지지 않았다 (나를 위해).구조체가 포함 된 스택을 만드는 방법은 무엇입니까?

그래서 문제는 다음과 같이됩니다. 사용자가 스택 크기를 제공 한 다음 스택을 초기화하고 푸시, 팝 및 표시로 이동해야합니다. 이제 내 관심은 초기화하는 방법입니다. malloc으로해야만한다는 것을 알고 있지만 어떻게 해야할지 모르겠습니다.

참고 : 스택에 있어야하는 구조체는 "stud"와 "prof"입니다.

는 Heres는 스택 내가 만든 : 이제 어떻게

struct MyStack 
{ 
    int head; 
    void **stack; 
    int size; 
}; 
typedef struct MyStack STACK; 
struct stud 
{ 
    char flag; 
    char fname[50]; 
    int semester; 
}; 
struct prof 
{ 
    char flag; 
    char fname[50]; 
    char course[30]; 
}; 
int main() 
{ 
    int size,sel; 
    size=GiveSize(); 
    STACK NewStack; 
    NewStack.size = size; 
} 

? 그것은이다 :

NewStack.stack = (구조체 * ("교수"또는 "스터드")?)의 malloc (사이즈 *의를 sizeof (구조체 ("교수"또는 "스터드") 내가 아는 어떻게

은? 어떤 종류의 스택은?

덕분에 Chnossos가! 당신은 정말

답변

-3

단순히

#include<iostream> 
#include<stack> 

using namespace std; 

struct stud 
{ 
    char flag; 
    char fname[50]; 
    int semester; 
}d; 
int main() 
{ 
    stack<stud> s; 
    stud d; 
    d.flag='a'; 
    strcpy(d.fname,"saurah"); 
    d.semester=4; 
    s.push(d); 
    stud f=s.top(); 
    s.pop(); 
    cout<<f.fname; 
    return 0; 
    } 
+3

이것은 C가 아닙니다. –

1

단순히 그런 일을 할 스택 헤더를 포함하여 템플릿 스택 객체를 사용할 수있는 날 :) 도움이 ...

void print_stack (STACK * stack) 
{ 
    struct stud * s; 
    s = stack->stack[0]; 
    printf("Student (%c) %s is in semester %d.\n", s->flag, s->fname, s->semester); 
} 

int main() 
{ 
    struct stud student = { 's', "toto", 1 }; 
    int size, sel; 

    size = GetSize(); 
    STACK NewStack; 

    NewStack.size = size; 
    NewStack.stack = malloc((size + 1) * sizeof(void *)); 
    NewStack.stack[size] = NULL; 

    NewStack.stack[0] = &student; 

    print_stack(&NewStack); 

    return 0; 
} 

... 성공적으로 Student (s) toto is in semester 1.을 인쇄합니다.


는 전체 스택을 인쇄하려면 다음 flag 변수가 스택에 저장된 모든 구조를 먼저 선언 된 경우에만 동작합니다

#define STUDENT_FLAG 's' 
#define PROF_FLAG  'p' 

void print_student (struct stud *s) 
{ 
    printf("Student (%c) %s is in semester %d.\n", s->flag, s->fname, s->semester); 
} 

void print_prof (struct prof *p) 
{ 
    printf("Prof (%c) %s is in course %d.\n", p->flag, p->fname, p->course); 
} 

void print_full_stack (STACK * stack) 
{ 
    char flag; 
    int i; 

    for (i = 0 ; i < stack->size ; ++i) 
    { 
     flag = *(char *)(stack->stack[i]); 
     if (flag == STUDENT_FLAG) 
      print_student(stack->stack[i]); 
     else if (flag == PROF_FLAG) 
      print_prof(stack->stack[i]); 
    } 
} 

참고.

+0

왜 "크기"대신 "크기 + 1"입니까? – CosmaOne

+0

그런 식으로 배열을 NULL 종료 할 수 있습니다. 크기를 저장하기 때문에 요구 사항은 아니며 단지 내 반사 작용 중 하나입니다. – Chnossos

+0

for (..)를 사용하여 스택의 모든 구조체를 표시하려면 함수 내부에서 어떻게 보이는지? 전의. PrintFullStack() – CosmaOne

관련 문제