数据结构之线性链表

线性链表是一种数据存储结构,其分为顺序存储结构和链式存储结构。

顺序存储结构存储数据的方式和平时接触到的数组是一样的,其数据结构定义如下:

#define MAXSIZE 100
typedef struct sqList
{
      ElemType data[MAXSIZE];
      int length;
};
       关于链表的初始化,寻找数据,插入数据,删除数据等操作,与数组类似,这里就不做详细介绍了。但是就插入,删除数据时,其总是要移动数据结构,其时间复杂度就为O(n),不太方便。从而引入了链式存储结构,其数据结构(也称之为结点)定义如下: 
typedef struct Node
{
   ElemType data;
   Node *next;
};其包括一个数据域和指针域,指针域是指向下一个结点的指针。
   对于链式存储结构其有头结点和头指针,头结点不是必须有的。下面介绍一下有关链式存储的几种操作:
(1)创建链表(有两种方法头插法和尾插法)代码如下:
<pre name="code" class="cpp">void CreateListHead(LinkList *L, int n)
{
	LinkList p;
	*L = (LinkList)malloc(sizeof(Node));
	(*L)->next = NULL;                      //头指针指向头结点
	if(n<=0)
		cout<<"the size of link error";
	else
	{
		for(int i=0;i<n;i++)
		{
			ElemType temp;
			cin>>temp;
			p = (LinkList)malloc(sizeof(Node));
			p->data=temp;
			p->next = (*L)->next;
			(*L)->next = p;
		}
	}


}


 
<pre name="code" class="cpp">void CreateListTail(LinkList*L,int n)
{
	LinkList p,r;
	*L = (LinkList)malloc(sizeof(Node));
	(*L)->next=NULL;
	r = *L;
	if(n<=0)
		cout<<"the size of link error";
	else
	{
		for(int i=0;i<n;i++)
		{
			ElemType temp;
			cin>>temp;
			p = (LinkList)malloc(sizeof(Node));
			p->data=temp;
			r->next = p;
			r=p;
		}
		r->next = NULL;//千万不要忘了最后一个节点的指针域为NULL
	}


 
(2)插入链表
void InsertList(LinkList L,int i,ElemType e)
{
//首先要遍历链表找到要插入数据的位置
for(int j =1;j<i;j++)
{
L=L->next;
}
//然后进行插入
LinkList p;
p=(LinkList)malloc(sizeof(Node))
p->data = e;
p->next = L->next;
l->next = p;
}

(3)删除链表中的数据

void DeleteList(LinkList L,int i,ElemType e)
{
//首先也是要遍历链表找到要删除的位置
LinkList p;
for(int j=1;j<i;j++)
{
  L=L->next;
}
p=L->next;
L->next= L->next->next;
free(p);
}//


上述的插入和删除函数都没有对输入的i进行判断,所以当我们进行编程要考虑L是否为空i是否超出了链表的长度等问题,从而使编程问题严密化。

 



    

       

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值