```c
**------------------------------链栈-----------------------------**
#include<stdio.h>
#include<stdlib.h>
#define datatype int
#define MAX 5
typedef struct node{
datatype data;
struct node *next;
}StackNode,*LinkStack;
LinkStack set_NULL()
{
return NULL;
}
int Empty_LinkStact(LinkStack L)
{
if (L == NULL)
{
return 0;
}
else{
return 1;
}
}
LinkStack push(LinkStack top, datatype data)
{
StackNode *s;
s = (StackNode*)malloc(sizeof(StackNode));
s->data = data;
s->next = top;
top = s;
return top;
}
LinkStack pop(LinkStack top)
{
StackNode *temp;
if (top == NULL)
{
return top;
}
else
{
temp = (StackNode*)malloc(sizeof(StackNode));
datatype data;
data = top->data;
printf("弹栈元素:%d \n", top->data);
temp = top;
top = top->next;
free(top);
return top;
}
}
void printf(LinkStack l)
{
if (l == NULL)
{
return;
}
else
while (l != NULL)
{
l = l->next;
printf("%d", l->data);
}
}
int main()
{
LinkStack l;
l = set_NULL();
l = push(l, 4);
l = push(l, 3);
l = pop(l);
system("pause");
}
**------------------------------循环队列--------------------------**
#include<stdio.h>
#include<stdlib.h>
#define datatype int
#define MAX 5
typedef struct{
datatype data[MAX];
int rear, font;
int num;
}SeQueue;
SeQueue *init_sequeue()
{
SeQueue * q;
q = (SeQueue*)malloc(sizeof(SeQueue));
q->font = q->rear = NULL;
q->num = 0;
return q;
}
int in_queue(SeQueue *q, datatype data)
{
if (q->num == MAX)
{
printf("队满\n");
return -1;
}
else{
q->data[q->rear] = data;
q->rear = (q->rear + 1) % MAX;
q->num++;
return 1;
}
}
int out_queue(SeQueue *q)
{
if (q->num == 0)
{
return -1;
}
else{
int data = q->data[q->font];
printf("弹出元素:%d \n", data);
q->font = (q->font + 1) % MAX;
q->num--;
return 1;
}
}
int main()
{
SeQueue *p;
p = init_sequeue();
in_queue(p, 5);
out_queue(p);
system("pause");
}
``
typedef struct node{
datatype data;
struct node * next;
}Qnode;
typedef struct {
Qnode * rear, *font;
}LQueue;
LQueue *init()
{
LQueue *q;
Qnode * p;
q = (LQueue*)malloc(sizeof(LQueue));
p = (Qnode*)malloc(sizeof(Qnode));
p->next = NULL;
q->font = p;
q->rear = p;
return q;
}
int Empty_LQueue(LQueue * L)
{
if (L->font == L->rear)
{
return 0;
}
else{
return 1;
}
}
void in_list(LQueue *l, datatype data)
{
Qnode *temp;
temp = (Qnode*)malloc(sizeof(Qnode));
temp->data = data;
temp->next = NULL;
l->rear->next = temp;
l->rear = temp;
}
int out_list(LQueue *l)
{
if (Empty_LQueue(l) == 0)
{
printf("队空\n");
return 0;
}
else{
Qnode *temp;
temp = l->font->next;
l->font->next = temp->next;
int data = temp->data;
printf("弹出数据:%d\n", data);
free(temp);
if (l->font->next == NULL)
{
l->rear = l->font;
}
return 1;
}
}
int main()
{
LQueue *l;
l = init();
in_list(l,4);
out_list(l);
system("pause");
}