找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2548|回复: 0
打印 上一主题 下一主题
收起左侧

单向链表结点的逐个删除-C语言教程

[复制链接]
跳转到指定楼层
楼主
ID:99624 发表于 2015-12-20 02:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
      每敲一次代码都会有新的收获,基本功不扎实啥也干不了。单向链表的插入,删除,创建,遍历是数据结构的基本操作。里边的算法值得学习。

源码:
/*
先创建一个单向链表,然后从头结点开始逐个删除。
*/

#include"stdio.h"
#include"stdlib.h"
//声明一个结点,实际上就是定义一个数据结构
struct node{
  int num;
  node *next;

};
//创建链表
node *creatlist()
{
        int i=0;//统计创建结点个数
    node *head,*p2,*p1;//p2用来传递结点指针
    head=p2=p1=new node;
        printf("请输入头结点数据域数据:\n\r");
        scanf("%d",&p1->num);
    p1->next=NULL;
        while(p1->num!=0)
        {
                p1=new node;
                scanf("%d",&p1->num);
                p2->next=p1;//头结点指针指向新创建的结点
            p2=p1;
            i++;
        }
        p2->next=NULL;//链表尾结点
    printf("创建的结点数是:%d\n",i);
        return head;
}

void display(node *head)
{
        node *p=head;
    while(p->next!=NULL)
        {
          printf("%d\t",p->num);
          p=p->next;
       
       
        }
   printf("\n");

  
}

//从头结点开始删除整个链表
void remove(node *head)
{
    int i=0;//统计删除结点个数
  //通过这两个指针的移动实现整个链表结点逐个删除,  
  node *p,*p1;//也就是说本函数只需轮流使用这两个指针移动就能实现遍历链表
   p=head;  //存储头指针,
   p1=p->next; //存储头结点指针域
   while(p->next!=NULL)//通过循环逐个删除结点
   {
      //刚开始p指向head,即p存储了头结点head本身的指针,即p就是头结点指针
       delete p;//通过这一步释放p所指向的内容,即删除头结点内容
           i++;
       p=p1;//p指向p1即下一个结点,这时p1成为新链表的头指针,因为之前的头结点已经删除
           //p1原来指向头结点的下一个结点
           p1=p1->next;//通过此步,p1指针重新指向,指向下一个结点实现指针移动
   }
  delete p;//将最后一个结点删除

  printf("删除结点个数: %d\n",i);

}

void main()
{
        node  *head=creatlist();
    display(head);
    remove(head);
  
}

--------------GKXW



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表