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->nextNULL)
{
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