单向链表结点的逐个删除
有些时间没有发帖了,今天尿一贴,以免被封号。关于单片机嵌入式的开发,个人认为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
做个图书管理系统 学生管理系统出来,再加上文件的读取和写入,计算机学院毕业设计就完成了 ...
这得多差的学校这样就能毕业啊,我们当初C语言的课程设计就有这种课题
页:
[1]