需求/问题2
在计算中,进程标识符(通常称为进程ID或PID)是大多数操作系统内核用来唯一标识活动进程的数字。 PID通常是按顺序分配的,从0开始,直到每个系统的最大值都增加。创建一个链接列表来存储PID。要创建新的PID,请使用createPID()
函数。使用
insertPID()
函数将每个PID插入到列表的开头。处理完成后,使用deletePID()
函数删除该特定的PID。将根据以下标准进行评估:
- 正确编写C代码及其结构
- 程序的编译和执行能力
- 实施正确的编程技术
- 完整的文档并正确提交
注意:您必须为此分配编写C编程代码。
我已经创建了一个代码:
#include<stdio.h>
#include<stdlib.h>
struct node
{
int info;
struct node *link;
};
void createPID ();
void insertPID (struct node *start,int x);
struct node * deletePID (struct node * start,int x);
void displayPID(struct node *start);
struct node * start;
int main()
{
createPID();
insertPID(start,0);
insertPID(start,1);
insertPID(start,2);
displayPID(start);
start=deletePID(start, 3);
displayPID(start);
}
void createPID(){
struct node *start = NULL;
}
void displayPID(struct node *start)
{
struct node *p;
if(start == NULL)
{
printf("List is empty\n");
return;
}
printf("List is :");
p=start;
while(p!=NULL)
{
printf("%d\t",p->info);
p=p->link;
}
printf("\n");
}
/*End of displayList()*/
void insertPID(struct node * start, int data)
{
struct node *temp,*p;
p=start;
while (p!=NULL)
{
if(p->link==NULL)
break;
p=p->link;
}
temp=(struct node *)malloc (sizeof (struct node));
temp->info=data;
if(p==NULL)
start=temp;
else
{
temp->link= p->link;
p->link= temp;
}
}
struct node* deletePID(struct node * start,int x){
struct node *temp, *p;
if(start == NULL)
{
printf("List is empty\n");
return start;
}
/*Deletion of first node */
if(start->info == x)
{
temp=start;
start= start->link;
free(temp);
return start;
}
/*Deletion in between or at the end */
p=start;
while (p->link != NULL)
{
if (p-> link -> info== x)
break;
p=p-> link;
}
if(p->link==NULL)
printf("Element %d not in list \n\n",x);
else
{
temp=p->link;
p->link=temp->link;
free (temp);
}
return start;
}
结果始终为空列表。需要帮助找出问题所在吗?
答案 0 :(得分:-1)
问题在insertPID
函数中。 start
作为函数的参数是局部变量,它隐藏全局start
和下面的行
start = temp;
仅修改本地start
,全局start
不受影响,并且始终为NULL。
如果要更新start
指针,则需要通过指针到指针传递它:
void insertPID (struct node **start,int x);
//...
insertPID(&start,0);
insertPID(&start,1);
insertPID(&start,2);
//...
void insertPID(struct node ** start, int data)
{
//...
p=*start;
//...
if(p==NULL)
*start=temp;
//...
}
void createPID(){
struct node *start = NULL;
}
我假设此函数要将start
(全局)设置为0?所以应该是:
void createPID(){
start = NULL;
}
您的版本引入了本地start
变量,因此全局变量不受影响。
但是这里createPID
的调用是多余的,因为start
作为全局变量在main
开始执行之前被初始化为0。