#include <malloc.h>
#include <stdio.h>
#include <string.h>
typedef struct processpcb
{
int id; /*??*/
struct processpcb *next;
}node;
node *creat(void) //??
{
node *head, *p1, *p2;
int 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;
free (p1);
return head;
}
void print(node *head)
{
node *p;
p = head;
if (head != NULL)
do {
printf("%d\t", p->id);
p = p->next;
} while (p != NULL);
}
/*??????????*/
node *del(node *head,int pcb)
{
node *p, *q;
p = head;
if (!head)
printf("not found!");
else {
if (p->id == pcb && !p->next) { //???
free(p);
return NULL;
} else if (p->id == pcb && p->next) {
head = head->next;
free(p);
return head;
} else {
while (p && p->id != pcb) {
q = p;
p = p->next;
}
if (!p)
printf("not found!");
else {
q->next = p->next;
free(p);
return head;
}
}
}
}
int main(void)
{
node *p;
int pcbid;
p = creat();
printf("\ndel a processpcb\n");
scanf("%d",&pcbid);
printf("\ninit_processpcb queue is:\n");
print(p);
p = del(p,pcbid);
printf("\ndel_processpcb queue is:\n");
print(p);
return 0;
}