wangyan915205 发表于 2015-11-10 20:13:09

单向链表结点的逐个删除

       有些时间没有发帖了,今天尿一贴,以免被封号。关于单片机嵌入式的开发,个人认为C语言的基本功非常重要!你能在这个行业混多久,混的咋样,C语言能力是一个关键因素。下面是一个单向链表的操作例程。





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

#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);

}

磊磊映画 发表于 2015-11-10 20:50:48

做个图书管理系统 学生管理系统出来,再加上文件的读取和写入,计算机学院毕业设计就完成了

Earthman 发表于 2015-11-10 21:30:04

磊磊映画 发表于 2015-11-10 20:50
做个图书管理系统 学生管理系统出来,再加上文件的读取和写入,计算机学院毕业设计就完成了 ...

这得多差的学校这样就能毕业啊,我们当初C语言的课程设计就有这种课题
页: [1]
查看完整版本: 单向链表结点的逐个删除