数据结构-单链表(学习笔记)

一、单链表的结点数据类型

typedef int DataType;
struct Node
{
 	DataTpye data;
 	struct Node *next; //next为指向下一结点的指针
};

二、初始化单链表

int InitList(Node *&H)
{
	H = new Node;	//分配空间,作为头结点
	if(!H)
	{
		cout<<"初始化错误"<next = NULL;
	return 1;
}

三、判表空

int ListEmpty(Node *H)
{
	if(H->next)
	{
		return 0;
	}
	else
	{
		return 1;
	}
}

四、求单链表中当前元素的个数

int ListLength(Node *H)
{
	Node *p = H->next;
	int total;
	while(p)
	{
		total++;
		p=p->next;
	}
	return total;
}

五、遍历单链表

void TraveseList(Node *H)
{
	Node *p = H->next;
	while(p)
	{
		cout<data<<" ";
		p=p->next;
	}
	cout<

六、查找指定节点

int Find_item(Node *H,DataType item)
{
	Node *p = H->next;
	int pos = 0;
	while(p)
	{
		pos++;
		if(p->data==item)
		{
			break;
		}
		p=p->next;
	}
	if(p)
	{
		return pos;
	}
	else
	{
		return 0;
	}
}

七、获取单链表上指定的元素

int Find_pos(Node *H,int pos,DataType *item)
{
	Node *p=H->next;
	int i=1;
	while(p&&i!=pos)		//判断插入查找是否有效
	{
		i++;
		p=p->next;
	}
	if(p==NULL)
	{
		cout<<"位置无效"<data;
	}
	return 1;
}

八、单链表的建立
A.链表表头插入法建立单链表

void CreateListF(Node *&H,DataType a[],int n)
{
	for(int i=0;idata=a[i];
		t->next=H->next;
		H->next=t;
	}
}

B.尾插法建表

void CreateListR(Node *&H,DataType a[],int n)
{
	int i;
	Node *r=H;
	while(r->next)		//找到尾7结点
	{
		r=r->next;
	}
	for(int i=0;idata=a[i];
		r->next=t;		//连接
		r=t;			//指针r移动到尾结点
	}
}

C.链表任意位置插入法建立单链表(必须找到所插位置的前一个结点,再进行插入)

int ListInsert(Node *&H,int pos,DataType item)
{
	Node *p=H;
	int pos=1;
	while(p)
	{
		if(i==pos)
		{
			break;
		}
		p=p->next;
	}
	if(p==NULL)
	{
		cout<<"插入位置无效!"<data=item;
	t->next=p->next;
	p-next=t;
	
	return 1;
}

九、从单链表中删除指定位置的结点

int ListDelete_pos(Node *&H,int pos,DataType *item)
{
	Node *p=H;
	Node *t=new Node;
	int i=1;
	
	while(p)
	{
		if(i==pos)
		{
			break;
		}
		p=p->next;
	}
	if(p==NULL)
	{
		cout<<"删除位置无效"<next;
	item=t->data;
	p->next=t->next;
	delete t;
	
	return 1;
}

十、从线性表中删除一个与指定值匹配的元素

int ListDelete_item(Node *&H,DataType item)
{
	Node *p=H;
	Node *t;
	while(p->next)
	{
		if(p->next->data==item)
		{
			break;
		}
		p=p->next;
	}
	if(p->next==NULL)
	{
		cout<<"删除元素不存在!"<next;
	p->next=t->next;
	delete t;
	
	return 1;
}

十一、撤销单链表

void Destroy(Node *&H)
{
	Node *p		//借助一个指针指向链表中的元素进行删除
	while(H)
	{
		p=H;
		H=H->next;		//从开头一个一个删除,每删除一个链表头指针就往后一个位置
		delete p;
	}
}

▲循环链表(链表中的最后一个结点指向头结点)

单链表 循环链表
判表空 head->next=NULL head->next=head
判表尾 p->next=NULL p->next=head
建空表 head->next=NULL head->next=head

你可能感兴趣的:(数据结构,数据结构,单链表)