线性表基础--链表(学习笔记)

链表

通过一组任意的存储单元来存储线性表中数据元素,存储单元可以连续或者不连续。

特点:逻辑上相邻的数据元素,其存储顺序不一定相邻。

单链表

结构

typedef struct Node{
	ElemType data;      //存放数据元素 
	struct Node *next;  //指针,用于指向下一个元素。 
}Lnode,*LinkList;
LinkList L //定义L为单链表的头指针。
LNode *p;  //定义p为指向单链表中任意节点的指针,*p表示节点。 
注释:这里面的一些结构名称与后面的名称并不相同。 
基本操作
1,初始化
LinkList *Init()
{
	LinkList * head;  //头指针
	head=(LinkList *)malloc(sizeof(LinkList));   //动态分配存储空间
	head->next=NULL;
	return head; 	
}
2,头插入元素

头插法是通过将新节点逐个插入链表的头结点,来创建链表。

特点:最先进入的元素排最后,最后进入的元素排在最前面。

​
int addhead(LinkList * h,ElemType x)
{
	LinkList * p;   // 指向新创建的节点(为插入元素创建的节点)
	p=(LinkList *)malloc(sizeof(LinkList));  //为插入元素动态分配存储空间
	if(p==NULL)
	  exit(0);     // 返回错误
	else
	{
		p->data=x;
		p->next=h->next;
		h->next=p;     // 通过指针来插入元素
	}
}

​
3,尾插入元素

在链表的最后一个节点来插入元素,来创建列表。

特点 :链表元素的顺序就是插入的顺序,第一个插入的为首节点。

​
int addtail(LinkList * h,ElemType x)
{
  LinkList * p, *r;	  //指向新创建元素的节点。
  p=(LinkList *)malloc(sizeof(LinkList));  //为新创建元素动态分配空间
  p->data=x;
  p->next=NULL;
  r=h;
  while(r->next!=NULL)
    r=r->next;
   r->next=p; 
}

​
4,任意位置插入元素
int Insert(LinkList * h,ElemType x, int i)  //i,插入的位置,x,插入的元素。
{
	 LinkList *p, * q;  // q 指向头指针,p指向新创建的节点(要插入元素的节点)
	 int j;
	 p=(LinkList *)malloc(sizeof(LinkList));  // 动态分配空间
	 p->data=x;
	 q=h;
	 for(j=1;j<=i-1;j++)
	    q=q->next;
	 p->next=q->next;
	 q->next=p; 
}
5,删除操作
int del(LinkList * h, int i)
{
	 LinkList * p,*q;  //指针q指向头节点,p指向所要删除元素的节点
	 int j;
	 q=h;
	 for(j=1;j<=i-1;j++) 
	   q=q->next;
	 p=q->next;
	 q->next=p->next;
	 free(p);  //free函数,释放存储空间
}
6,输出操作
int out(LinkList * h)
{
	LinkList * p;
	p=h->next; //指向头节点
	while(p!=NULL)
	{
		printf("%5d",p->data);
		p=p->next;
	}
	printf("\n");	
}
7,计算链表元素的个数(链表长度)
int Len(LinkList * h)
{
	LinkList * p;
	int n=0;
	p=h;  //指向头结点
	while(p->next!=NULL)
	{
		n++;
		p=p->next;
	}
	return n;
}
8,查找链表元素的位置
int find(LinkList * h,ElemType x)
{
	LinkList * p;
	int n=0;   //用来计算元素所处的位置
	p=h->next;  //指向头结点
	while(p!=NULL)
	{
		n++;
		if(p->data==x)
		{
			return n;
			break;
		}
	   p=p->next;
	}
	return -1;   // 没有找到元素
}

你可能感兴趣的:(链表,学习,笔记,数据结构)