数据结构--链表的思想和实现代码

     链表是一种最常用的数据结构,其他的数据结构也可以由链表实现,链表由一系列不必在内存中相连的结构组成,每一个结构均含有表元素和指向该元素后继元的结构的指针,称为Next指针,为了方便理解,我们把这样的结构称为节点,最后一个节点的Next指针指向NULL,有的情况下,还为链表添加一个头节点,可以防止在删除链表的第一个元素时,丢失链表,如下图所示:

   对链表的操作通常是创建一个链表,从链表中删除元素,向链表中插入元素等,如果理解了链表的概念,这些操作很容易实现。

 

   链表的实现与操作代码如下:

#include <iostream> //包含头文件iostream
using namespace std;  //使用命名空间std

typedef struct Node *PtrToNode;
typedef PtrToNode List;
typedef PtrToNode Position;

struct Node
{
   int Element;
   Position Next;

};


函数声明///

List MakeEmpty (); //创建一个空链表
int IsEmptu (List L);    //测试一个链表是否为空
int IsLast (Position P, List L); //测试当前位置是否是链表的末尾
Position Find (int x, List L);    //寻找链表中的元素x
Position FindPrevious (int x, List L);   //寻找元素x的前驱元
void Delete (int x, List L);       //删除元素x
void Insert (int x, List L, Position P);  //插入元素x
void DeleteList (List L);   //删除一个表

函数定义///
List MakeEmpty ()
{
   List Header;
   Header = static_cast<List>(malloc(sizeof (struct Node)));   //创建一个表头
   Header->Element = 0;
   Header->Next = NULL;
   return Header;
}



int IsEmptu (List L)
{
   
   return L->Next == NULL;
}

int IsLast (Position P, List L)
{
	return P->Next == NULL;
}


Position Find (int x, List L)
{
   Position P;
   P = L->Next ;
   while (P != NULL && P->Element != x)
	   P = P->Next ;
   return P;
}

Position FindPrevious (int x, List L)
{
	Position P;
	P = L;
	while (P->Next != NULL && P->Next->Element != x)
	{
	   P = P->Next ;

	}
	return P;

}

void Delete (int x, List L)
{
   Position P, TmpCell;
   P = FindPrevious (x,L);
   if(!IsLast(P,L))
   {
      TmpCell = P->Next ;
	  P->Next = TmpCell->Next ;
	  free(TmpCell);   //  释放内存
   }
}

void Insert (int x, List L, Position P)
{
   Position TmpCell;
   TmpCell = static_cast<Position>(malloc(sizeof (struct Node)));   //创建一个新的结点
   if(TmpCell == NULL)
	   cout << "out of space!!" << endl;
   TmpCell->Element = x;
   TmpCell->Next = P->Next ;
   P->Next = TmpCell;

}

void DeleteList (List L)
{
   Position P, Tmp;
   P = L->Next ;
   L->Next = NULL;
   while (P != NULL)
   {
     Tmp = P->Next ;
	 free(P);
	 P = Tmp;
   }
}


int main ()
{
/测试链表/
 List L = MakeEmpty ();
 Insert (4,L,L);
 cout << L->Next->Element  << endl;



return 0;
}

  还有其他很多操作,比如打印链表等,都可以按照上面的思想实现,重要的是理解链表的基本思想。

 

     夜深了,天什么时候才会亮。

 

转载于:https://www.cnblogs.com/1242118789lr/p/6719897.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值