#include<iostream>
using namespace std;
//typedef void*;
typedef struct node * pointer; //结点指针类型
struct node{ //链队列结点结构
void* data;
pointer next;
};
typedef struct{
pointer front,rear;
}lkqueue; //链队列类型
typedef struct{
int age;
int num;
char name[10];
}student;
//初始化
void init_lkqueue(lkqueue *lq){
pointer p;
p=new node; //申请头结点空间
p->next=NULL; //头结点next指针为空
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,void *x){ //队头元素值由参数返回
pointer p;
if(lq->rear==lq->front){cout<<"队空,无队头可取!\n";return 0;}
p=lq->front->next; //队头
x=p->data; //取出队头元素值
return 1;
}
//入队
void en_lkqueue(lkqueue *lq,void *x){
pointer p;
p=new node; //申请新结点空间
p->data=x; //给新结点赋值
lq->rear->next=p; //原尾指针指向新结点
lq->rear=p; //新结点成为新尾指针
p->next=NULL; //新尾结点next指针为空
}
/*
//出队(改进的方法,尾指针不用移动)
int de_lkqueue(lkqueue *lq,datatype *x){
pointer s;
if(lq->rear==lq->front){cout<<"队空,不能出队!\n";return 0;} //队空下溢
s=lq->front; //s指向头结点
*x=s->next->data; //取出原队头数据
lq->front=s->next; //头指针指向原队头(原队头变成头结点)
delete s; //释放原结点
return 1;
}*/
//出队(改进的方法,尾指针不用移动) //删除第i个学生的信息
int de_lkqueue(lkqueue *lq,int i){
pointer s;
void *x;
if(lq->rear==lq->front){cout<<"队空,不能出队!\n";return 0;} //队空下溢
s=lq->front; //s指向头结点
x=s->next->data; //取出原队头数据
lq->front=s->next; //头指针指向原队头(原队头变成头结点)
delete s; //释放原结点
return 1;
/*
lq->student->s[j]
*/
}
//队列长度
int le_lkqueue(lkqueue *lq){
pointer p=lq->front;
int length=0;
while(p!=lq->rear)
{
++length;
p=p->next;
}
return length;
}
//输出队列
void out_sqqueue(lkqueue *lq,void *x){
lq->front->data=x;
lq->front=lq->front+1;
cout<<lq->front->data<<" \n";
}
// lq->front->data=s[0]
int main(){
lkqueue lq;
student s[5];
void *x;
pointer p;
int i,j;
init_lkqueue(&lq);
if(empty_lkqueue(&lq)==1) cout<<"队列为空!"<<endl;
else cout<<"队列不为空"<<endl;
for(i=0;i<5;i++)
{
cout<<"请输入第"<<i+1<<"个学生信息"<<endl;
cout<<"num="; cin>>s[i].num;
cout<<"name="; cin>>s[i].name;
cout<<"age="; cin>>s[i].age;
cout<<"\n";
en_lkqueue(&lq,&s[i]);
}
cout<<le_lkqueue(&lq);
cout<<"输出:\n";
for(i=0;i<5;i++)
{
out_sqqueue(&lq,&s[i]);
}
return 0;
}
。可能有点愚钝,不知道为什么弄不了。感觉合情合理? 输入后,完全不是预料的结果 |