其他分享
首页 > 其他分享> > c语言链表的小问题

c语言链表的小问题

作者:互联网

想不通咋不能用呢。。

//链表//
#include<stdio.h>
#include<stdlib.h>

struct Grade_Info
{
int score;
struct Grade_Info *next;
};

typedef struct Grade_Info NODE;

NODE *Create_LinkList();
void Insert_LinkList(NODE *head,NODE *pnew,int i);
void Delete_LinkList(NODE *head,int i);
void Display_LinkList(NODE *head);
void Free_LinkList(NODE *head);

void main()
{
NODE *head,*pnew;
head=Create_LinkList();
if(head=NULL)
return;
printf("after create: ");
Display_LinkList(head);

pnew=(NODE*)malloc(sizeof(NODE));
if(pnew==NULL)
{
	printf("no enough memory!\n");
	return;
}
pnew->score=88;
Insert_LinkList(head,pnew,3);//在第三个节点后插入一个数据为88的节点
printf("after insert: ");
Display_LinkList(head);//删除第三个节点

Delete_LinkList(head,3);
printf("after delete: ");
Display_LinkList(head);

Free_LinkList(head);

}

//构建一个链表函数//

NODE *Create_LinkList()
{
NODE *head,tail,pnew;
int score;
head=(NODE
)malloc(sizeof(NODE));//动态内存分配创造头节点//
if(head=NULL)
{
printf(“NO ENOUGH MEMORY!\n”);
return(NULL);
}
head->next=NULL;
tail=head;//这里都是关于指针的操作//
printf(“input the score of students:\n”);
while(1)
{
scanf("%d",&score);
if(score<0)
break;
pnew=(NODE
)malloc(sizeof(NODE));//动态内存分配创造一个存放数据的节点//
if(pnew==NULL)
{
printf(“no enough memory!\n”);
return (NULL);
}
pnew->score=score;//通过指针成员访问->将数据放入节点的数据域//
pnew->next=NULL;//将节点指针域置NULL//
tail->next=pnew;//节点插入到尾节点后(链表尾)//
tail=pnew;//(原先含义上的)尾指针指向插入的尾节点。特别说明的是在逻辑上是使得插入的节点成为尾节点,以便后续的链表内容修改//
}
return(head);//放回构建的链表头指针(首地址)以调用//
}

//链表插入函数//

void Insert_LinkList(NODE *head,NODE *pnew,int i)
{
NODE *p;
int j;
p=head;
for(j=0;j<i&&p!=NULL;j++)
p=p->next;//p指向要插入的第i个节点//
if(p==NULL)
{
printf(“the %d node not foundt!\n”,i);
return;//链表中第i个节点不存在
}
pnew->next=p->next;
p->next=pnew;//相当于把原先已有的关系(原先第i个节点和第i+1个节点的关系)赋值给了新的关系(现在第i个节点和插入节点的关系),后续再进行一次关系创建,完成一次插入操作//
}

//链表输出函数//

void Display_LinkList(NODE *head)
{
NODE *p;
for(p=head->next;p!=NULL;p=p->next)
printf("%d",p->score);
printf("\n");
}

//链表删除函数//

void Delete_LinkList(NODE *head,int i)
{
NODE *p,*q;
int j;
if(i0)
return ;
p=head;
for(j=1;j<i&&p->next!=NULL;j++)
p=p->next;
if(p->next
NULL)
{
printf(“the %d node not foundt!\n”,i);
return ;
}

q=p->next;
p->next=q->next;
free(q);

}

//链表删除函数//

void Free_LinkList(NODE *head)
{
NODE *p,*q;
p=head;
while(p->next!=NULL)
{
q=p->next;
p->next=q->next;
free(q);
}
free(head);
}

标签:NODE,问题,head,语言,pnew,next,链表,节点,LinkList
来源: https://blog.csdn.net/weixin_44783096/article/details/90239721