队–先进先出的线性表
顺序实现
#include <iostream>
using namespace std;
typedef int datatype;
const int maxsize= 100 ;
typedef struct {
datatype data[ maxsize] ;
int front, rear;
} sqqueue;
void init_sqqueue ( sqqueue * sq) {
sq- > front= sq- > rear= 0 ;
}
int empty_sqqueue ( sqqueue * sq) {
if ( sq- > rear== sq- > front) return 1 ;
else return 0 ;
}
int gethead_sqqueue ( sqqueue * sq, datatype * x) {
if ( empty_sqqueue ( sq) == 1 ) { cout<< "队空,无队头可取!\n" ; return 0 ; }
* x= sq- > data[ ( sq- > front+ 1 ) % maxsize] ;
return 1 ;
}
int en_sqqqueue ( sqqueue * sq, datatype x) {
if ( ( sq- > rear+ 1 ) % maxsize== sq- > front) {
cout<< "队满,不能入队!\n" ; return 0 ;
}
sq- > rear= ( sq- > rear+ 1 ) % maxsize;
sq- > data[ sq- > rear] = x;
return 1 ;
}
int de_sqqueue ( sqqueue * sq, datatype * x) {
if ( empty_sqqueue ( sq) == 1 ) {
cout<< "队空,不能出队!\n" ; return 0 ;
}
sq- > front= ( sq- > front+ 1 ) % maxsize;
* x= sq- > data[ sq- > front] ;
return 1 ;
}
int main ( ) {
sqqueue sq;
int x;
int i;
datatype k = 0 ;
do {
cout<< "0、退出" << endl;
cout<< "1、初始化" << endl;
cout<< "2、判队空" << endl;
cout<< "3、入队" << endl;
cout<< "4、出队" << endl;
cout<< "5、取队头" << endl;
cin>> x;
switch ( x) {
case 0 : return 0 ;
case 1 : init_sqqueue ( & sq) ; break ;
case 2 : i = empty_sqqueue ( & sq) ;
if ( i) {
cout<< "队空\n" << endl;
} else cout<< "队不为空\n" << endl;
break ;
case 3 : i = en_sqqqueue ( & sq, 5 ) ;
if ( i) {
cout<< "入队成功\n" << endl;
}
break ;
case 4 : de_sqqueue ( & sq, & k) ; break ;
case 5 : i = gethead_sqqueue ( & sq, & k) ;
if ( i) {
cout<< "队顶元素:" << k<< endl;
}
break ;
}
} while ( x!= 0 ) ;
return 0 ;
}
链接实现
# include <iostream>
using namespace std;
typedef int datatype;
typedef struct node * pointer;
struct node{
datatype data;
pointer next;
} ;
typedef struct {
pointer front, rear;
} lkqueue;
void init_lkqueue ( lkqueue * lq) {
pointer p;
p= new node;
p- > next= NULL ;
lq- > front= lq- > rear= p;
}
int empty_lkqueue ( lkqueue * lq) {
if ( lq- > rear== lq- > front) return 1 ;
else return 0 ;
}
int gethead_lkqueue ( lkqueue * lq, datatype * x) {
pointer p;
if ( empty_lkqueue ( lq) == 1 ) {
cout<< "队空,无队头可取!\n" ; return 0 ;
}
p= lq- > front- > next;
* x= p- > data;
return 1 ;
}
void en_lkqueue ( lkqueue * lq, datatype x) {
pointer p;
p= new node;
p- > data= x;
lq- > rear- > next= p;
lq- > rear= p;
p- > next= NULL ;
}
int de_lkqueue ( lkqueue * lq, datatype * x) {
pointer s;
if ( empty_lkqueue ( lq) == 1 ) {
cout< "队空,不能出队!\n" ; return 0 ;
}
s= lq- > front;
* x= s- > next- > data;
lq- > front= s- > next;
delete s;
return 1 ;
}
int main ( ) {
lkqueue lk;
int x;
int i;
int k = 0 ;
do {
cout<< "0、退出" << endl;
cout<< "1、初始化" << endl;
cout<< "2、判队空" << endl;
cout<< "3、入队" << endl;
cout<< "4、出队" << endl;
cout<< "5、取队顶" << endl;
cin>> x;
switch ( x) {
case 0 : return 0 ;
case 1 : init_lkqueue ( & lk) ; break ;
case 2 : i = empty_lkqueue ( & lk) ;
if ( i) {
cout<< "队空" << endl;
} else cout<< "队不为空" << endl;
break ;
case 3 : en_lkqueue ( & lk, 1 ) ; break ;
case 4 : de_lkqueue ( & lk, & k) ; break ;
case 5 : i = gethead_lkqueue ( & lk, & k) ;
if ( i) {
cout<< "队顶元素:" << k<< endl;
}
break ;
}
} while ( x!= 0 ) ;
return 0 ;
}