栈+队列

顺序栈
Static.h

#ifndef _STACK_H_
#define _STACK_H_

#define SIZE 10


typedef enum {FALSE, TRUE}  BOOL;

typedef int Data;
typedef struct stack
{
	Data data[SIZE];         // 栈存储空间
	int top; // 栈顶元素的下标
}Stack;


// 初始化栈
void Init(Stack *s);

//判断空栈
BOOL Empty(Stack *s);

//判断满栈
BOOL Full(Stack *s);



//入栈
void Push(Stack *s,Data data);

//出栈
void Pop(Stack *s);

//获取栈顶元素
Data GetTop(Stack *s);


#endif

Static.c

#include "stack.h"
#include <stdlib.h>

void Init(Stack *s)
{
	if (NULL==s)
		return;
	
	s->top=-1;
}

BOOL Empty(Stack *s)
{
	if (NULL==s)
		return;
	
	if(s->top==-1)
		return TRUE;
	return FALSE;
}

BOOL Full(Stack *s)
{
	if (NULL==s)
		return;
	
	if(s->top==SIZE-1)
		return TRUE;
	return FALSE;
}

void Push(Stack *s,Data data)
{
	if (NULL==s)
		return;
	if(TRUE==Full(s))
		return;
	
	s->data[++s->top]=data;
}

void Pop(Stack *s)
{
	if (NULL==s)
		return;
	if(TRUE==Empty(s))
		return;
	
	s->top--;
}

Data GetTop(Stack *s)
{
	if (NULL==s)
		return;
	
	if(TRUE==Empty(s))
		exit(-1);
	return s->data[s->top];
}

main.c

#include <stdio.h>
#include "stack.h"

int main()
{
	Stack s;
	Init(&s);
	
	int i;
	for(i=0;i<10;i++)
	{
		Push(&s,i);
	}
	
	while(!Empty(&s))
	{
		Data data=GetTop(&s);
		printf("%d\n",data);
		
		Pop(&s);
	}
	printf("栈结束\n");
	
	return 0;
}

链式栈
Static.h

#ifndef _STACK_H_
#define _STACK_H_

#define SIZE 10


typedef enum {FALSE, TRUE}  BOOL;

typedef int Data;
typedef struct _node
{
	Data data;         // 栈存储空间
	struct _node *next; // 栈顶元素的下标
}Node;
typedef struct _stack
{
	Node head;
}Stack;


// 初始化栈
void Init(Stack *s);

//判断空栈
BOOL Empty(Stack *s);


//入栈
void Push(Stack *s,Data data);

//出栈
void Pop(Stack *s);

//获取栈顶元素
Data GetTop(Stack *s);


#endif



Static.c

#include "Stack.h"
#include <stdlib.h>

void Init(Stack *s)
{
	if (NULL==s)
		return;
	
	s->head.next=NULL;
}

BOOL Empty(Stack *s)
{
	if (NULL==s)
		return FALSE;
	
	if(s->head.next==NULL)
		return TRUE;
	
	return FALSE;
}



void Push(Stack *s,Data data)
{
	if (NULL==s)
		return;
	
	Node *node =(Node *)malloc(sizeof(Node)/sizeof(char));
	
	if(node==NULL)
		return;
	
	node->data=data;
	node->next=s->head.next;
	(s->head).next=node;
}

void Pop(Stack *s)
{
	if (NULL==s)
		return;
	
	if(TRUE==Empty(s))
		return;
	
	Node *tmp=(s->head).next;
	(s->head).next=tmp->next;
	free(tmp);
}

Data GetTop(Stack *s)
{
	if (NULL==s)
		return;
	
	if(TRUE==Empty(s))
		exit(-1);
	
	return (s->head).next->data;
}




main.c

#include <stdio.h>
#include "Stack.h"

int main()
{
	Stack s;
	Init(&s);
	
	int i;
	for(i=0;i<10;i++)
	{
		Push(&s,i);
	}
	
	while(!Empty(&s))
	{
		Data data=GetTop(&s);
		printf("%d\n",data);
		
		Pop(&s);
	}
	printf("栈结束\n");
	
	return 0;
}


链式队列
Queue.h

#ifndef _QUEUE_H_
#define _QUEUE_H_

#define SIZE 10


typedef enum {FALSE, TRUE}  BOOL;

typedef int Data;
typedef struct _node
{
	Data data;         // 栈存储空间
	struct _node *next; // 栈顶元素的下标
}Node;
typedef struct queue
{
	Node *front;
	Node *rear;
}Queue;


// 初始化栈
void Init(Queue *q);

//判断空栈
BOOL Empty(Queue *q);


//入栈
void Push(Queue *q,Data data);

//出栈
void Pop(Queue *q);

//获取栈顶元素
Data GetTop(Queue *q);


#endif


Queue.c

#include "Queue.h"
#include <stdlib.h>

void Init(Queue *q)// 初始化栈
{
	if (NULL==q)
		return;
	
	q->front=NULL;
	q->rear=NULL;
}

BOOL Empty(Queue *q)//判断空栈
{
	if (NULL==q)
		return FALSE;
	
	if(q->front==NULL)
		return TRUE;
	
	return FALSE;
}



void Push(Queue *q,Data data)//入栈
{
	if (NULL==q)
		return;
	
	Node *node =(Node *)malloc(sizeof(Node)/sizeof(char));
	
	if(node==NULL)
		return;
	
	node->data=data;
	node->next=NULL;
	if(q->rear!=NULL)
	{
		q->rear->next=node;
		q->rear=node;
	}
	else
	{
		q->rear=node;
		q->front=node;
	}
	
}

void Pop(Queue *q)//出栈
{
	if (NULL==q)
		return;
	
	if(TRUE==Empty(q))
		return;
	
	Node *tmp=q->front;
	q->front=tmp->next;
	free(tmp);
	
	if(q->front==NULL)
	{
		q->rear=NULL;
	}
}

Data GetTop(Queue *q)//获取栈顶元素
{
	if (NULL==q)
		return;
	
	if(TRUE==Empty(q))
		exit(-1);
	
	return q->front->data;
}

main.c

#include <stdio.h>
#include "Queue.h"

int main()
{
	Queue q;
	Init(&q);
	
	int i;
	for(i=0;i<10;i++)
	{
		Push(&q,i);
	}
	
	while(!Empty(&q))
	{
		Data data=GetTop(&q);
		printf("%d\n",data);
		
		Pop(&q);
	}
	printf("栈结束\n");
	
	return 0;
}

顺序队列
Queue.h

#ifndef _QUEUE_H_
#define _QUEUE_H_

#define SIZE 10


typedef enum {FALSE, TRUE}  BOOL;

typedef int Data;

typedef struct queue
{
	Data data[SIZE];
	int front;
	int rear;
}Queue;


// 初始化队列
void Init(Queue *q);

//判断空队列
BOOL Empty(Queue *q);

//判断满队列
BOOL Full(Queue *s);

//入队列
void Push(Queue *q,Data data);

//出队列
void Pop(Queue *q);

//获取队头元素
Data GetTop(Queue *q);


#endif

Queue.c

#include "Queue.h"
#include <stdlib.h>

void Init(Queue *q)// 初始化队列
{
	if (NULL==q)
		return;
	
	q->front=0;
	q->rear=0;
}

BOOL Empty(Queue *q)//判断空队列
{
	if (NULL==q)
		return FALSE;
	
	if(q->front==q->rear)
		return TRUE;
	
	return FALSE;
}

BOOL Full(Queue *q)
{
	if (NULL==q)
		return FALSE;
	if((q->rear+1)%SIZE==q->front)
		return TRUE;
	
	return FALSE;
}



void Push(Queue *q,Data data)//入队列
{
	if (NULL==q)
		return;
	
	if(Full(q)==TRUE)
		return;
	
	q->rear=(q->rear+1)%SIZE;
	q->data[q->rear]=data;
	
	
}

void Pop(Queue *q)//出队列
{
	if (NULL==q)
		return;
	
	if(TRUE==Empty(q))
		return;
	
	
	q->front=(q->front+1)%SIZE;
}

Data GetTop(Queue *q)//获取队头元素
{
	if (NULL==q)
		return;
	
	if(TRUE==Empty(q))
		exit(-1);
	
	return q->data[(q->front+1)%SIZE];
}
main.c

#include <stdio.h>
#include “Queue.h”

int main()
{
Queue q;
Init(&q);

int i;
for(i=0;i<10;i++)
{
	Push(&q,i);
}

while(!Empty(&q))
{
	Data data=GetTop(&q);
	printf("%d\n",data);
	
	Pop(&q);
}
printf("栈结束\n");

return 0;

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值