单链表的头插法与尾插法
来源:互联网 发布:js防水材料生产工艺 编辑:程序博客网 时间:2024/06/11 23:39
学习完线性表的知识已经很长时间了,今天有空重新复习整理一下。线性表有两种表示方法,顺序表示和链式表示。
顺序表示即就是数组,其特点为:
优:(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数据结构与算法
- 编写头插法建立单链表的过程与体会
- [数据结构]头插法与尾插法
- 单链表的建立与输出
- 单链表的插入与删除
- 单链表的插入与删除
- AngularStrap -- Modal
- 【mark】如何改变VC中控件间的TAB切换顺序
- H. 264 算法特点
- 基于MFC的ActiveX控件开发
- c++ primer 学习笔记-第三章
- 单链表的头插法与尾插法
- [objective-c]使用Lumberjack未定义
- 异常:javax.el.PropertyNotFoundException: Property 'id' not found on
- Foundation Framework 轻量级本地数据存储 NSUserDefaults
- 沉痛反思------今目标被罚
- Android Intent Service Usage
- Spring 管理hibernate事物,xml配置,注解 两种实现方式
- 《C/C++/Java/Pascal 程序设计基础》习题集 解题3
- QT中qlistwidget和qtableview用法