动态链表的建立—尾插法
来源:互联网 发布:男模项海 知乎 编辑:程序博客网 时间:2024/03/29 23:58
今天尝试了简单动态链表的建立 不幸的是失败了 目前还没有找出错在哪儿 明天一定要搞清楚错误的原因 到时在对本文进行修改
#include <iostream>
using namespace std;
struct node
{
int num;
struct node *next;
};
void main()
{
int i,num;
struct node *head;
struct node *p,*q;
head=NULL;
p=q=(struct node *)malloc(sizeof(struct node));
while (head==NULL) //错误一 ,这里的head空间没有得到申请
{
head=p;
}
for(i=0;i<5;i++)
{
p=(struct node *)malloc(sizeof(struct node));
scanf("%d",&num);
p->num=num;
q=p; //这里是一个死循环,p和q共有同一个内存地址,在下一步的操作中又不断将自己指向自己,构成的是一个死循环
p=q->next;
}
p->next=NULL;
q=head;
while(q->next!=NULL)
{
printf("%d ",num); //这里的num应该由p->num来输出,而且head中是没有数据的,不能输出
q=q->next;
}
free(q);
}
今天完成了修改,错误已经在上面的程序中指出 以下是修改好的程序 这里写的是链表的尾插法
下篇文章中将介绍链表的头插法
正确的程序应该是这样的
#include <stdio.h>
#include <stdlib.h>
struct node
{
int num;
struct node *next;
};
void main()
{
int i,num;
struct node *head;
struct node *p,*q;
head=p=q=(struct node *)malloc(sizeof(struct node));
head->next=NULL;
while (head->next==NULL)
{
head->next=q;
}
for(i=0;i<5;i++)
{
p=(struct node *)malloc(sizeof(struct node));
scanf("%d",&num);
p->num=num;
q->next=p;
q=p;
}
q->next=NULL;
q=head->next;
while(q!=NULL)
{
printf("%d ",q->num);
q=q->next;
}
free(q);
}
总结:这是一个简单的尾插法动态链表
1、用p建立一个节点,让q来指向它,再将p移动到q节点的位置,继续输入数据,重复操作,就可以完成动态链表的建立;
2、注意:需要一个头结点来标明链表的初始位置,否则链表数据没办法输出
- 动态链表的建立—尾插法
- 建立动态链表
- 动态建立链表
- 建立动态链表
- 简单静态、动态链表的建立
- 【c++程序】动态链表的建立
- 动态数据结构-动态建立链表
- C 动态链表的建立,输出,删除,插入
- C语音动态链表的建立与输出
- 动态目录的建立
- C语言:建立动态链表
- 细节决定未来(建立动态链表)
- Delphi数据库的动态建立
- 动态二维数组的建立
- XtraReports 动态报表的建立
- 设备节点的动态建立
- XtraReports 动态报表的建立
- delphi 数据库的动态建立
- mysql 不能插入中文: Incorrect string value
- Windows8开启上帝模式
- 深入浅出MFC学习笔记:MFC六大关键技术仿真之消息映射和消息流动
- EasyUI中combogrid的使用方法
- Asp.net Application 使用 JsonRPC 调用函数 demo
- 动态链表的建立—尾插法
- opencv中IplImage字节对齐问题
- c++中数组的定义和缺陷
- NAND Flash ECC算法长度计算
- EasyUI中combogrid的代码实例
- 一款简单的硬盘清零文件
- hdu 2539 又一水题需要我反思下 疯了啊
- 30段超实用CSS代码
- ExecutorService生命周期