栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言链表

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言链表

1.定义结构体,作为结点使用
struct Grade_Info   
{   
   int score;   
   struct Grade_Info *next;   
};
typedef struct Grade_Info NODE;

2.创建链表

    NODE *Greate_LinkList()

1.新建头结点,尾结点
    head=(NODE *)malloc(sizeof(NODE));
    if(head==NULL)	//创建失败
    {
        printf("no enough memory!n");
        return (NULL);
    }
    head->next=NULL;	//头结点下一个结点为空
    tail=head;	//尾结点指向头结点

2.加入新结点

2.1创建新结点

2.2为新结点赋值
    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;	//新结点的下一个指向空
    //尾结点移向当前结点
    tail->next=pnew;	//尾结点的下一个,即对应的此刻的上一个的下一个,指向新结点
    tail=pnew;	//新结点变成尾结点
}

3.插入结点
    void Insert_LinkList(NODE *head,NODE *pnew, int i)	//已经定义好了新结点,和新结点的位置

3.1找到要插入的位置

3.2插入结点
    NODE *p;	//做索引用
    int j;
    
    p=head;	//p指向头结点
    //p向后移动i个位置,此刻的位置为i-1,即指向要插入的结点前面
    for(j=0;jnext;  
    if(p==NULL)
    {
        printf("the %d node not found!n",i);
        return;
    }
   //新结点的前一个指向新结点,新结点指向前一个结点的后一个结点
   pnew->next=p->next;     
   p->next=pnew;   

4 删除指定结点
void Delete_LinkList(NODE *head, int i)

4.1 找到该结点
    NODE *p,*q;
    int j;
    if(i==0)
        return;
    p=head;
    for(j=0;jnext !=NULL;j++)
        p=p->next;      //p的指向要插入的结点的前驱结点
    if(p->next==NULL)
    {
        printf("the %d node not found!n",i);
        return;
    }

4.2 删除该结点
    q=p->next;  //q指向要删除的结点
    p->next=q->next;    //前面结点的下一个指向当前结点的下一个
    free(q);	//删除当前结点

5 销毁链表
void Free_LinkList(NODE *head)

5.1 销毁所有结点
    NODE *p,*q;
    p=head;
    while (p->next!=NULL)
    {
        q=p->next;	//q为p的下一个	
        p->next=q->next;	//p向后移动
        free(q);	//销毁q
    }

5.2 销毁头结点
    free(head);

5 显示所有结点
void Display_LinkList(NODE *head)
{
    NODE *p;
    for(p=head->next;p!=NULL;p=p->next)	//从头结点的下一个开始,到最后一个结点
        printf("%d ",p->score);
    printf("n");
}

6 主函数

6.1 创建链表

6.1.1 创建头结点

6.1.2 添加数据
    NODE *head, *pnew;
    head=Greate_LinkList();
    if(head==NULL)
        return;
    printf("after create:");
    Display_LinkList(head);

6.2 插入数据

6.2.1 创建新结点

6.2.2 添加新结点
    pnew = (NODE *) malloc(sizeof(NODE));
    if(pnew==NULL)
    {
        printf("no enough memory!n");
        return;
    }
    pnew->score=88;
    Insert_LinkList(head,pnew,3);
    printf("after insert:");
    Display_LinkList(head);

6.3 删除数据

6.3.1 删除结点

6.3.2 销毁链表
    Delete_LinkList(head,3);
    printf("after delete:");
    Display_LinkList(head);
    Free_LinkList(head);

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号