1.动态地输入进程队列,如1,3,4,2
2.出队方式
3.队首进程出队
4.队中进程出队(选定进程)
5.队尾进程出队
6.根据进程id选择一个进程出列(若不存在该进程,则提示不存在)
#include <malloc.h>
#include <stdio.h>
#include <string.h>
#define NULL 0
typedef struct processpcb
{
int id;/*进程控制块编号*/
struct processpcb *next;
}node;
int n;
node *creat(void) /*建立进程控制块队列表*/
{
node *head,*p1,*p2;
n=0;
printf("Input processpcb table:ID\n");
p1=p2=(node *)malloc(sizeof(node));
scanf("%d",&p1->id);
head=NULL;
while (p1->id>0)
{
n=n+1;
if (n==1) head=p1;
else p2->next=p1;
p2=p1;
p1=(node *) malloc (sizeof(node));
scanf("%d",&p1->id);
}
p2->next=NULL;
return(head);
}
node *del(node *head,int pcb)
{
node *p=head,*q;
q=p->next;
if(p->id==pcb)
return q;
while(q&&q->id!=pcb)
{
p=q;
q=q->next;
}
if(p->id=pcb)
p->next=q->next;
return head;
}
void print (node *head) /*输出链表*/
{
node *p;
p=head;
if(!p) printf("链表为空!");
else
{
printf("元素为:");
while(p)
{
printf("%5d",p->id);
p=p->next;
}
}
}
int main()
{
node *p,*q;
int pcbid;
p=creat();
printf("\nappend a processpcb\n");
scanf("%d",&pcbid);
q=(node *)malloc(sizeof(node));
q->id=pcbid;
q->next=NULL;
printf("\ninit_processpcb queue is:\n");
print(p);
p=del(p,pcbid);
printf("\nappend_processpcb queue is:\n");
print(p);
}