「可変長なスタック,キュー」というデータ構造のプログラムを作成せよ
#include <stdio.h>
#include <stdlib.h>
typedef struct {
//??
} STACK;
typedef struct {
//??
} QUEUE;
void push(STACK*, int);
int pop(STACK*);
void printSTACK(STACK*);
void put(QUEUE*, int);
int get(QUEUE*);
void printQUEUE(QUEUE*);
int main(int argc, char* argv[])
{
int i,n;
//??
//??
srand(time(NULL));
for(i=0;i<3;i++)
{
n=rand()%100;
printf("push %d\n", n);
push(&s, n);
printSTACK(&s);
}
for(i=0;i<3;i++)
{
printf("pop %d\n", pop(&s));
printSTACK(&s);
}
for(i=0;i<3;i++)
{
n=rand()%100;
printf("put %d\n", n);
put(&q, n);
printQUEUE(&q);
}
for(i=0;i<3;i++)
{
printf("get %d\n", get(&q));
printQUEUE(&q);
}
return 0;
}
void push(STACK* s, int m)
{
//??
}
int pop(STACK* s)
{
//??
}
void printSTACK(STACK* s)
{
//??
}
void put(QUEUE* q, int n)
{
//??
}
int get(QUEUE* q)
{
//??
}
void printQUEUE(QUEUE* q)
{
//??
}
#include <stdio.h>
#include <stdlib.h>
typedef struct _node{
int n;
struct _node *next;
} node;
typedef struct {
int n;
int a[];
} STACK;
typedef struct {
int n;
int in;
int out;
int a[];
} QUEUE;
node *createnode(int);
void printnode(node*);
node *addHead(node*,int);
node *addHeadnode(node*,node*);
void push(STACK*, int);
int pop(STACK*);
void printSTACK(STACK*);
void put(QUEUE*, int);
int get(QUEUE*);
void printQUEUE(QUEUE*);
int main(int argc, char* argv[])
{
int i,n;
STACK s;
s.n=0;
QUEUE q;
q.in=0;
q.out=0;
q.n=0;
node *p;
p=NULL;
srand(time(NULL));
for(i=0;i<3;i++)
{
n=rand()%100;
printf("add %d\n", n);
if(n<50)
{
p=addHead(p, n);
}
else
{
p=addTail(p, n);
}
printnode(p);
}
for(i=0;i<3;i++)
{
n=rand()%100;
printf("push %d\n", n);
push(&s, n);
printSTACK(&s);
}
for(i=0;i<3;i++)
{
printf("pop %d\n", pop(&s));
printSTACK(&s);
}
for(i=0;i<3;i++)
{
n=rand()%100;
printf("put %d\n", n);
put(&q, n);
printQUEUE(&q);
}
for(i=0;i<3;i++)
{
printf("get %d\n", get(&q));
printQUEUE(&q);
}
return 0;
}
void printnode(node *p)
{
while(p!=NULL)
{
printf("\t%d\n", p->n);
p=p->next;
}
}
node *createnode(int n)
{
node *p=malloc(sizeof(node));
p->n=n;
p->next=NULL;
return p;
}
node *addHead(node *p, int n)
{
return addHeadnode(p,createnode(n));
}
node *addHeadnode(node *p, node *n)
{
n->next=p;
return n;
}
void push(STACK* s, int m)
{
if(s->n>=N)return;
s->a[s->n++]=m;
}
int pop(STACK* s)
{
if(s->n<=0)return -1;
return s->a[--s->n];
}
void printSTACK(STACK* s)
{
int i;
printf("\tn=%d\n", s->n);
for(i=0;i<s->n;i++)
printf("\ta[%d]=%d\n", i, s->a[i]);
}
void put(QUEUE* q, int n)
{
if(q->n>=N)return;
q->n++;
q->a[q->in++]=n;
if(q->in >= N)q->in=0;
}
int get(QUEUE* q)
{
if(q->n<=0)return -1;
q->n--;
if(q->out>=N)q->out=0;
return q->a[q->out++];
}
void printQUEUE(QUEUE* q)
{
int i;
printf("\tin=%d\n", q->in);
printf("\tout=%d\n", q->out);
for(i=q->out;;i++)
{
if(i>=N)i-=N;
if(i==q->in)return;
printf("\ta[%d]=%d\n", i, q->a[i]);
}
}
これの??が入っている部分を適切に回答する問題なのですが
まったくわかりません。下が自分で考えて書いたものですが。。。
教えてください