单链表的表示与实现

1.单链表的存储结构

 struct LNode{
 	ElemType date;
 	LNode *next;
 };
 typedef LNode *LinkList;

2.构建一个空的线性表 L

 void InistList(LinkList &L)
 {
 	L = (LinkList)malloc(sizeof(LNode));
 	if(L == NULL)
 	    exit (OVERFLOW);
 	L -> next = NULL;
 }

3.销毁线性表 L

 void DestoryList(LinkList &L)
 {
 	LinkList q;
 	while(L)
 	{
 		q = L -> next;
 		free(L);
 		L = q;
	 }
 }

4.将表 L 设置为空表

 void ClearList(LinkList L)
 {
 	LinkList p = L -> next;
 	L -> next = NULL;
 	DestoryList(p);
 }

5.判断表 L 是否为空

  Static isEmpty(LinkList L)
  {
       if(L -> next == NULL)
  	     return FALSE;
       else
            return true;
  }

6.求表 L 的长度

  int getLength(LinkList L)
  {
  	int len=0;
  	LinkList p = L->next;
  	while(p)
  	{
  	   len++;
  	   p = p->next;
	 }
	  return len;
  } 

7.取出第 i 个元素

  ElemType getElem(LinkList L, int i,ElemType &e)
  {
  	LinkList p = L->next;
	int j=1;
	while(p&&j<i)
	{
	   j++;
	   p=p->next;
	}
	if(!p||j>i)
	  return ERROR;
	e=p->date;
	
	return OK;
  }

8.找出元素 e 在表中的位置

  int getLocation(LinkList L,ElemType e)
  {
  	int i=0;
  	LinkList p = L -> next;
  	while(p)
  	{
  	   i++;
  	   if(p->date == e)
  		  return i;
  	    p = p -> next;
	 }
	  return 0;
  }

9.找出元素 e 在表中前一个元素

  Static getPrior(LinkList L,ElemType e,ElemType &pre_e)
  {
    LinkList q,p=L->next;
  	while(p->next)
  	{
  		q=p->next;
  		if(q->date== e)
  		{
  			pre_e=p->date;
  			return OK;
		  }
  		p=q;
	  }
	  return ERROR;
  }

10.找出元素 e 在表中后一个元素

  Static getNext(LinkList L,ElemType e, ElemType &next_e)
  {
    LinkList p=L->next;
    while(p->next)
    {
    	if(p->date == e)
		{
			next_e = p->next->date;
			return OK; 
		}
		p=p->next;
     }
	return ERROR;
  }

11.在表中第 i 个位置插入元素 e

  Static ListInsert(LinkList L,int i,ElemType e)
  {
  	LinkList p=L;
  	int count=0;
    while(count<i-1&&p)
    {
    	p=p->next;
    	count++;
	}
  	if(count > i-1||!p)
  	   return ERROR;
  	LinkList q = (LinkList)malloc(sizeof (LNode));
  	q->date=e;
  	q->next=p->next;
  	p->next=q;
  	
  	return OK;
  }

12.在表中第 i 个位置删除元素 e

  Static ListDelete(LinkList L,int i,ElemType &e)
  {
  	LinkList q,p=L;
  	int count=0;
  	while(count<i-1&&p->next)
  	{
  		p=p->next;
  		count++;
	  }
	if(count>i-1||!p->next)
	   return ERROR;
	q=p->next;
	e=q->date;
	p->next=q->next;
	free(q);
	
	return OK;
  }

13.打印表

  void visitList(LinkList L)
  {
  	LinkList p=L->next;
  	while(p)
  	{
  		printf("%d\n",p->date);
  		p=p->next;
	  }
	  putchar('\n');
  }


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值