线性表的链式存储结构
Posted 晓乎
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线性表的链式存储结构相关的知识,希望对你有一定的参考价值。
要求:使用头插法和尾插法来分别创建两个线性表,编程实现单链表的查找、插入和删除操作的算法。
首先引入头文件,定义结构体:
#include<stdio.h> #include<stdlib.h> #include<malloc.h> typedef int ElemType; //定义节点类型 typedef struct LNode { ElemType data; struct LNode *next; }LNode,*LinkList;
(1)、创建链表
头插法:链表的逻辑顺序与结点的插入顺序相反,即逆序。从一个空表开始,反复的读入数据,生成结点放到链表中,注意这里是插入到当前链表的表头之后,如下图:
创建方法如下:
//单链表的建立(头插法建立) LinkList CreateLinkList_H() { LNode *L; ElemType x; //申请头结点的空间 L=(LNode *)malloc(sizeof(LNode)); L->next=NULL; scanf("%d",&x); while(x!=-1) { LNode *p; p=(LNode *)malloc(sizeof(LNode));//申请新节点的空间 p->data=x; p->next=L->next; L->next=p; scanf("%d",&x); } return L; }
尾插法:线性表的逻辑顺序与节点的插入顺序相同,将新节点插入到当前链表的链尾上,为此必须加上一个尾指针指针p使其一直指向当前链表的尾结点。如图
创建方法如下:
//单链表的建立(尾插法建立) LinkList CreateLinkList_T() { LNode *L,*r,*p; ElemType x; L=(LNode *)malloc(sizeof(LNode)); L->next=NULL; r=L; scanf("%d",&x); while(x!=-1) { p=(LNode*)malloc(sizeof(LNode)); p->data=x; p->next=r->next; r->next=p; r=p; scanf("%d",&x); } r->next=NULL; return L; }
以上是关于线性表的链式存储结构的主要内容,如果未能解决你的问题,请参考以下文章