3 文件夹:
代码:

****************************main.c***********************************
/*
* wuxiuwen
*20120901
*用数组描述队列
*/
/***************************/
#include"arrqueue.h"
int main()
{
int i;
char c;
printf("输入1为入栈,输入2为出栈,输入其他退出\n");
while(1)
{
while(scanf("%d",&i) != 1)
continue;
switch(i)
{
case 1:getchar();
// fflush(stdin);
scanf("%c",&c);
push(c);
break;
case 2:c=pop();
printf("%c\n",c);
break;
default: return ;
}
}
return 0;
}
*************************arrqueue.h*********************************
#include<stdio.h>
void push(char);
char pop();
*************************arrqueue.c*********************************
#include"arrqueue.h"
#define N 5
int top=-1;
char queue[N];
int rear =-1;
int head=0;
void push(char a)
{
if(rear == head+4)
{
printf("队列满\n");
return ;
}
++rear;
queue[rear%5]=a;
}
char pop()
{
char temp;
if(rear<head)
{
printf("队列空\n");
rear = -1;
head = 0;
return ;
}
temp = queue[head%5];
head++;
return temp;
}
**************************执行结果**********************************
[root@localhost 3]# ./a.out
输入1为入栈,输入2为出栈,输入其他退出
1
a
1
b
1
c
1
d
1
e
1
f
队列满
2
a
2
b
2
c
2
d
2
e
2
队列空
3
[root@localhost 3]#
**********************************************************************
4文件夹
代码:

****************************main.c***********************************
/*
* wuxiuwen
*20120901
*用链表描述堆栈
*/
/***************************/
#include"listqueue.h"
//#define N 5
int main()
{
//a[-1]=12; 可以访问,但是有可能出错
//printf("%d\n",a[-1]);
int i;
char c;
printf("输入1为入栈,输入2为出栈,输入其他退出\n");
while(1)
{
scanf("%d",&i);
switch(i)
{
case 1:getchar();
// fflush(stdin);
scanf("%c",&c);
push(c);
break;
case 2:c=pop();
printf("%c\n",c);
break;
default: return ;
}
}
return 0;
}
*************************arrqueue.h*********************************
#include<stdio.h>
typedef struct node
{
char data;
struct node * next;
}NODE;
void push(char);
char pop();
*************************arrqueue.c*********************************
#include"listqueue.h"
#include<stdlib.h>
#define N 5
//队列的长度
static NODE *head =NULL;
static NODE *rear=NULL;
static int n=0;
NODE *getnode(char c)
{
NODE *pnew=NULL;
pnew=(NODE*)malloc(sizeof(NODE));
if(pnew ==NULL)
{
printf("内存分配失败\n");
return;
}
pnew->data=c;
pnew->next=NULL;
}
void push(char a)
{
NODE *pnew=NULL;
if(n>=N)
{
printf("队列满\n");
return ;
}
pnew=getnode(a);
if(head ==NULL)
{
head=rear=pnew;
}
else
{
rear->next=pnew;
rear=pnew;
}
n++;
}
char pop()
{
char temp;
NODE *p=NULL;
if(head ==NULL)
{
printf("队列空");
return ;
}
temp=head->data;
p=head;
head=head->next;
if(head ==NULL) //队列为空的后的操作
rear =NULL;
free(p);
return temp;
}
**************************执行结果**********************************
[root@localhost 4]# ./a.out
输入1为入栈,输入2为出栈,输入其他退出
1
a
1
b
1
c
1
d
1
e
1
f
队列满
2
a
2
b
2
c
2
d
2
e
2
队列空
3
[root@localhost 4]#
**********************************************************************
本文通过两个示例介绍如何使用数组和链表实现队列数据结构,并演示了基本的队列操作,包括入队和出队。展示了队列满和队列空的状态处理。

被折叠的 条评论
为什么被折叠?



