单链表的头插法与尾插法
来源:互联网 发布:网络主播当红10首歌曲 编辑:程序博客网 时间:2024/06/03 22:39
转自:http://blog.csdn.net/man_lady_horse/article/details/47128725
学习完线性表的知识已经很长时间了,今天有空重新复习整理一下。线性表有两种表示方法,顺序表示和链式表示。
顺序表示即就是数组,其特点为:
优:(1)用数组存储数据元素,操作方法简单,容易实现
(2)无须为表示结点间的逻辑关系而增加额外的存储开销
(3)存储密度高
(4)顺序表可按元素位序随机存取结点
缺:(1)做插入、删除操作时,需大量移动数据元素,效率非常低
(2)要占用连续的存储空间,存储分配只能预先进行。分配过大,会导致空间浪费;分配过小将会造成数据溢出。
链式表示即就是链表,其特点为与顺序表相反
链表不用事先估计存储空间的大小,但其存储密度较低(存储密度:指一个结点中数据元素所占的存储单元数和整个结点所占的存储单元之比,顺序表的存储密度为1,链式存储密度小于1)
链表的插入有两种方式:头插法和尾插法
头插法:在头结点(为了操作方便,在单链表的第一个结点之前附加一个结点,称为头结点。头结点的数据域可以存储数据标题、表长等信息,也可以不存储任何信息,其指针域存储第一个结点的首地址)H之后插入数据,其特点是读入的数据顺序与线性表的逻辑顺序正好相反
#include <stdio.h>
#include <stdlib.h>
#define N 10
struct Data{
int num;
struct Data *next;
};
int main ( int argc , char * argv[])
{
int data,i;
struct Data *head,*p;
head = (struct Data *)malloc (sizeof(struct Data));
head->next = NULL;
for ( i = 0; i < N; i++)
{
scanf ("%d",&data);
p = ( struct Data *)malloc(sizeof(struct Data));
p->num = data;
p->next = head->next;
head->next = p;
}
printf("the list is :");
while (p!=NULL)
{
printf("%d\t",p->num);
p=p->next;
}
printf("\n");
return 0;
}
尾插法:将每次插入的新结点放在链表的尾部
#include <stdio.h>
#include <stdlib.h>
#define N 10
struct Data{
int num;
struct Data *next;
};
struct Data * Insert()
{
int data,i;
struct Data *head,*r,*s;
head = ( struct Data * )malloc( sizeof (struct Data));
head->next = NULL;
r=head;
for (i=0; i<N; i++ )
{
scanf("%d",&data);
s = ( struct Data *)malloc(sizeof (struct Data));
s->num = data;
s->next = r->next;
r->next = s;
r=s;
}
/*
printf("the list is :");
s=head->next;
while(s!=NULL);
{
printf("%d\t",s->num);
s = s->next;
}
printf("\n");*/
return head;
}
int main ( int argc , char * argv [])
{
struct Data *head,*p;
head = Insert();
printf("the list is : ");
p = head->next;
while(p!=NULL)
{
printf("%d\t",p->num);
p = p->next;
}
printf("\n");
}
- 单链表的头插法与尾插法
- 单链表的头插法与尾插法
- 单链表的头插法与尾插法
- 单链表的头插法与尾插法
- 单链表的头插法与尾插法
- 单链表的头插法与尾插法
- 单链表的建立与删除 (使用头插法和尾插法实现)
- 用Python实现单链表的头插法与尾插法
- 单链表创建:头插法与尾插法
- 头插法(逆序)和尾插法(顺序)实现单链表的创建与排序
- “头插法”与“尾插法”建立线性链表的异同
- Java实现链表结构的头插法与尾插法
- 单链表的创建 头插法 Java数据结构与算法
- 编写头插法建立单链表的过程与体会
- [数据结构]头插法与尾插法
- 单链表的建立与输出
- 单链表的插入与删除
- 单链表的插入与删除
- 编程语言——深入而形象化的理解编程
- android Monkey测试源码分析之二
- 十万级以上的网络引擎
- 机器学习之logistic回归的梯度上升算法
- Mysql5.6主从复制-基于binlog
- 单链表的头插法与尾插法
- Python 元组总结
- 在spring boot 中混合使用form login和http basic
- 最小生成树 prim
- IOS中.pch文件的使用
- nginx上传模块nginx_upload_module和nginx_uploadprogress_module模块进度显示,如何传递GET参数等。
- 使用python-aiohttp爬取网易云音乐
- Gradle项目构建工具介绍
- jsonp的奥秘