链队的基本操作

//1、设置程序的环境,将下列环境设置代码补充完整。
#include "stdio.h"
#include "string.h"
#define OK 1
#define ERROR 0

typedef int status;    
             
typedef struct stu{           //添加图书信息结构
  char no[20];                //学号
  char name[50];              //姓名
  float score;                 //成绩
}stu;

typedef struct QNode{    /* 定义链队列的结点结构类型 */
    stu data;
	struct QNode *next;
}QNode,*QueuePtr;        

typedef struct {                  /* 定义队列的链式表示结构类型 */
	QueuePtr front;
	QueuePtr rear;
}LinkQueue;                   //定义链队列类型变量

status initQueue(LinkQueue &Q)
{   
	Q.front=Q.rear=new QNode;
	Q.front->next=NULL;
	return OK;
}
//3、在第1和第2题的基础上,编写入队函数、出队函数。
/* 图书数据入队 */
status append(LinkQueue &Q)
{   QNode *p;
	p=new QNode;
	printf("输入学号 no=?");
	scanf("%s",&p->data.no);
	printf("输入姓名 name=?");
	scanf("%s",p->data.name);
	printf("输入成绩  score?");
	scanf("%f",&p->data.score);
	p->next=NULL;
	Q.rear->next=p;
	Q.rear=p;
	return OK;	
}

/* 出队*/
status Qdelete(LinkQueue &Q,stu &e)
{  QNode *p;
if(Q.front==Q.rear) return ERROR;
p=Q.front->next;
strcpy(e.no,p->data.no );   //将出队元素值保存到e
strcpy(e.name,p->data.name);
e.score=p->data.score;
Q.front->next=p->next;
if(Q.rear==p) Q.rear=Q.front;
delete p;
return OK;
}

change(LinkQueue &Q,stu e){
	QNode *p;
	if(Q.front==Q.rear) return ERROR;
	p=Q.front->next;
	while(p){
		if(strcmp(p->data.name,e.name)==0)
		{
			printf("find!");
			p->data.score=e.score;
			return OK;
		}	
		p=p->next;
	}
	return ERROR;
}

//4、输入显示队列元素的函数display ( )。
status display(LinkQueue Q)
{    QNode *p;
	if(Q.front==Q.rear) return ERROR;
    p=Q.front->next;
	printf("链队列元素是:\n");
	printf("学号:\t姓名\t\t成绩\t\n");
    while(p!=NULL)
	{  printf("%s\t",p->data.no);
		printf("%s\t",p->data.name);
		printf("%.0f\t\n",p->data.score);
	  p=p->next;
	}
	printf("\n");
    return OK;
}
//5、输入主函数对上面各个函数实现调用,记录并分析程序的运行结果。
main()
{ 
int x,n,i; stu e;
QNode *p;
LinkQueue q;
x=initQueue(q);
if(x) printf("初始化成功!");
printf("请输入元素的个数");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
   append(q);
}
display(q);
Qdelete(q,e);  
printf("被删除的学生元素是:\n");
printf("%s\t%s\t\t%0.2f\t\n",e.no,e.name,e.score);
display(q);
printf("你要修改的姓名=?成绩=?");
scanf("%s",e.name);
scanf("%f",&e.score);
 change(q,e);
 display(q);
 if(!x)  printf("not find");
}
posted @ 2021-11-18 20:47  一只狗狗  阅读(135)  评论(0)    收藏  举报