栈——先进后出
typedef int ElemType;
typedef struct node Node;
typedef struct node SeqStack;
struct node
{
ElemType data;
Node *next;
};
SeqStack *CreateStack()
{
SeqStack *stk;
stk = (SeqStack *)malloc(sizeof(Node));
stk->next = NULL;
return stk;
}
void PushStack(SeqStack *stk,ElemType e)
{
Node *q;
q = (Node *)malloc(sizeof(Node));
q->data = e;
q->next = stk->next;
stk->next = q;
}
ElemType PopStack(SeqStack *stk)
{
if(stk->next == NULL)
{
printf("栈为空!");
exit(OVERFLOW);
}
Node *p;ElemType e;
p = (Node *)malloc(sizeof(Node));
p = stk->next;
stk->next = stk->next->next;
e = p->data;
free(p);
return e;
}
队列:先进先出
typedef int ElemType;
typedef struct node Node;
typedef struct queue SeqQueue;
struct node
{
ElemType data;
Node *next;
};
struct queue
{
Node *first;
Node *rear;
};
SeqQueue *CreateQueue()
{
SeqQueue *sq;
sq = (SeqQueue *)malloc(sizeof(SeqQueue));
sq->first = sq->rear = NULL;
return sq;
}
void PushQueue(SeqQueue *sq,ElemType e)
{
Node *p;
p = (Node *)malloc(sizeof(Node));
p->data = e;
p->next = NULL;
if (sq->first == NULL)
sq->first = sq->rear = p;
else
{
sq->rear = sq->rear->next = p;
}
}
ElemType PopQueue(SeqQueue *sq)
{
Node *p;ElemType e;
p = (Node *)malloc(sizeof(Node));
if (sq->first == NULL)
{
printf("队列为空!");
exit(OVERFLOW);
}
else
{
p = sq->first;
sq->first = sq->first->next;
e = p->data;
free(p);
return e;
}
}