数据结构顺序栈和环形队列基本运算实现

环形队列

代码

#include
#include
#define MaxSize 100
typedef char ElemType;
typedef struct
{
	ElemType data[MaxSize];
	int front,rear;
}SqQueue;
void InitQueue(SqQueue * &q)
{
	q=(SqQueue *)malloc(sizeof(SqQueue));
	q->front=q->rear=0;
}
void DestroyQueue(SqQueue * &q)
{
	free(q);
}
bool QueueEmpty(SqQueue *q)
{
	return(q->front==q->rear);
}
bool enQueue(SqQueue *&q,ElemType e)
{
	if((q->rear+1)%MaxSize==q->front)
		return false;
	q->rear=(q->rear+1)%MaxSize;
	q->data[q->rear]=e;
	return true;
}
bool deQueue(SqQueue * &q,ElemType &e)
{
	if(q->front==q->rear)
		return false;
	q->front=(q->front+1)%MaxSize;
	e=q->data[q->front];
	return true;
}
 
int main()
{
	ElemType e;
	SqQueue *q;
	printf("环形队列基本运算:\n");
	printf("(1)初始化队列q\n");
	InitQueue(q);
	printf("(2)依次进队列元素a,b,c\n");
    if(!enQueue(q,'a'))printf("\t:不能进站\n");
	if(!enQueue(q,'b'))printf("\t:不能进站\n");
	if(!enQueue(q,'c'))printf("\t:不能进站\n");
	printf(" (3)队列%s\n",(QueueEmpty(q)?"空":"非空"));
	if(deQueue(q,e)==0)
		printf("队空不能出队\n");
	else
		printf(" (4)出队一个元素%c\n",e);
	printf(" (5)依次进队def\n");
	while(!QueueEmpty(q))
	{
		deQueue(q,e);
		printf("%c",e);
	}
	printf("\n");
	printf(" 释放队列\n");
	DestroyQueue(q);
	return 1;
}

顺序栈 

代码

#include
#include
#define maxsize 100
typedef char elemtype;
typedef struct
{
	elemtype data[maxsize];
	int top;
}sqstack;
void initstack(sqstack *&s)
{
	s=(sqstack *)malloc(sizeof(sqstack));
	s->top=-1;
}
void destroystack(sqstack *&s)
{
	free(s);
}
bool stackempty(sqstack *s)
{
	return(s->top==-1);
}
bool push(sqstack *&s,elemtype e)
{
	if(s->top==maxsize-1)
	return false;
	s->top++;
	s->data[s->top]=e;
	return true; 
}
bool pop(sqstack *&s,elemtype &e)
{
	if(s->top==-1)
	return false;
	s->top++;
	s->data[s->top]=e;
	return true;
	
}
bool gettop(sqstack *s,elemtype &e)
{
	if(s->top==-1)
	return false;
	e=s->data[s->top];
	return true;
}
int main()
{
	elemtype e;
	sqstack *s;
	printf("顺序栈基本运算:\n");
	printf("初始化");
	initstack(s);
	printf("栈为%s\n",(stackempty(s)?"kong":"feikong"));
	printf("依次进栈");
	push(s,'a');
	push(s,'b');
	push(s,'c');
	push(s,'d');
	push(s,'e');
	printf("栈为%s\n",(stackempty(s)?"kong":"feikong"));
	while (!stackempty(s))
	{
		pop(s,e);
		printf("%c",e); 
	}
	destroystack(s);
	return 1; 
	 	
 }

 

你可能感兴趣的:(数据结构)