单链表
来源:互联网 发布:淘宝机器人客户问题 编辑:程序博客网 时间:2024/06/02 19:27
单链表是线性表的一种链式存储结构,属于线性结构,是通过指针来实现链式存储的,相比顺序表,存储密度更低,针对插入、删除等操作,其效率更高。
相比线性结构,单链表需要提高效率,则需要针对每一个元素,可以不连续存储,但是必须知道其后继元素的地址。
因此,对于任一数据元素在存储其自身的信息(数据信息)外,还需要存储其后继信息(其后继的存储地址)。
因此,便产生构成单链表的结点,其由存储元素信息的数据域和存储后继位置的指针域组成。
头指针:单链表中第一个结点的存储位置。
头结点:单链表的第一个结点前附设一结点。
最后一个结点,无后继,则其指针域为空。
(一)单链表的结构
typedef struct Node { DataType data; struct Node *next; }LNode,*LinkList;
(二)单链表上的基本运算实现
(1)建立不带头结点的单链表
(a)从头部插入(与读入数据顺序相反
(b)从尾部插入(与读入数据顺序相同)LinkList Creat_LinkList() { LinkList L; LNode *s; L=NULL; int x; scanf("%d",&x); while(x!=flag) { s=(LNode *)malloc(sizeof(LNode)); s->data=x; s->next=L; L=s; scanf("%d",&x); } return L; }
(2)求表长(a)带头结点LinkList Creat_LinkList() { LinkList L; LNode *s,*r; L=r=NULL; int x; scanf("%d",&x); while(x!=flag) { s=(LNode *)malloc(sizeof(LNode)); s->data=x; if(L==NULL) L=s; else r->next=s; r=s; scanf("%d",&x); } if(r) r->next=NULL; return L; }
(b)不带头结点int Length_LinkList(LinkList L) { int i=0; LNode *p; p=L; while(p->next) { p=p->next; i++; } return i; }
int Length_LinkList(LinkList L) { int i=0; LNode *p; p=L; while(p) { i++; p=p->next; } return i; }
讨论技术欢迎加群:翻转世界IT 386707638#include<stdio.h>#include<string.h>#include<stdlib.h>typedef int DataType;#define flag 0typedef struct Node { DataType data; struct Node *next;}LNode,*LinkList;//定义单链表LNode *Creat_LinkList()//创建带头结点的单链表{ LinkList L; int x; LNode *s,*r; s=(LNode *)malloc(sizeof(LNode)); s->next=NULL; L=r=s; scanf("%d",&x); while(x!=flag) { s=(LNode *)malloc(sizeof(LNode)); s->data=x; if(L->next==NULL) L->next=s; else r->next=s; r=s; scanf("%d",&x); } if(r!=NULL) r->next=NULL; return L;}LinkList reverse(LinkList L)//单链表的倒置算法{ LNode *p,*q; p=L->next; L->next=NULL; while(p) { q=p; p=p->next; q->next=L->next; L->next=q; } return L;}int main(){ LinkList H; H=Creat_LinkList(); LNode *p; p=H->next; while(p) { printf(" %d",p->data); p=p->next; } printf("\n"); LinkList S; S=reverse(H); LNode *q; q=S->next; while(q) { printf(" %d",q->data); q=q->next; } printf("\n"); system("pause"); return 0;}
0 0
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- 单链表
- C++将一个图片显示到窗口里面
- Python集合(set)类型的操作
- c++11 函数内部返回对象使用move语义的最佳实践
- 记录下自己拙计的算法之旅 LeetCode Rotate Array
- 函数后面加throw关键字的含义
- 单链表
- 深度学习方法:受限玻尔兹曼机RBM(二)网络模型
- JavaScript规范
- css3中边框的4种样式
- mongodb系列之四:java高级查询
- Delphi移动平台UI自定义控件OrangeUI 1.47 XE7、XE8版正式发布
- 15第六周项目六——复数模板类(1)
- nil,Nil,NULL,NSNull的理解
- 米老师谆谆教导---2015.4.12