首页 > 代码库 > 数据结构——动态链表

数据结构——动态链表

说明:严蔚敏的《数据结构》(C语言版)学习笔记,记录一下,以备后面查看。


#include <stdio.h>
#include <malloc.h>

const int OK = 1;  //定义正确返回
const int ERROR  = -1;  //定义错误的返回
const int OVERFLOW = -2; //定义溢出

//定义元素类型
typedef int ElemType;
//定义返回类型
typedef int Status;

typedef struct LNode{
	ElemType data;
	struct LNode *next;
}LNode, *LinkList;

//获取第i个元素(L为带头结点的单链表的头指针)
Status GetElem_L(LinkList L, int i, ElemType &e){
	LinkList p = L->next; //L->next指向头结点
	int j = 1;
	while(p&&j<i){
		p = p->next;
		++j;
	}
	if(!p || j>i) return ERROR;
	e = p->data;
	return OK;
}

//插入元素(第i个位置之前插入元素)
Status ListInsert_L(LinkList L, int i, ElemType &e){
	LinkList p = L; //头结点
	int j = 0;
	while(p && j<i-1){
		p = p->next;
		++j;
	}
	if(!p || j>i-1) return ERROR;
	LinkList s = (LinkList)malloc(sizeof(LNode));
	s->data = http://www.mamicode.com/e;>部分说明:

1、第i个元素之前插入元素

如上图所示,假如现在有4个元素,那么有四个可选插入位置(①②③④):

让p先指向头结点,我们需要找到第i-1个结点,也就是需要插入位置的前一个结点,比如我们要插入到i=3,那么需要找到2位置,插入到③位置。


数据结构——动态链表