C ++リニアチェーン格納テーブル:単鎖

単一リンクリストの基本的な操作

LinkList CreatList(LinkList &L);//创建单链表
LinkList List_HeadInsert(LinkList &L);//头插法
LinkList List_TailInsert(LinkList &L);//尾插法 
LinkList Delete_i(LinkList &L,int i);//删除第i个节点
LinkList Delete_e(LinkList &L,int e);//删除值为e的节点
LNode *GetElem(LinkList &L,int i);//查询第i个节点
LNode *LocateElem(LinkList &L,int e);//查询值为e的节点
LinkList InsertList(LinkList &L,int i,int e);//在第i个位置上插入值为e的节点
void display(LNode *head);//显示链表

構造が定義されています

typedef struct LNode{
	int data;
	struct LNode *next;
}LNode,*LinkList;

完全なコード

#include "stdafx.h"
#include<iostream>
using namespace std;

typedef struct LNode
{
	int data;
	struct LNode *next;
}LNode,*LinkList;

LinkList List_HeadInsert(LinkList &L);
LinkList List_TailInsert(LinkList &L);
LinkList Delete_i(LinkList &L,int i);
LinkList Delete_e(LinkList &L,int e);
LNode *LocateElem(LinkList L,int i);
LNode *GetElem(LinkList L,int e);
LinkList CreatList(LinkList &L);
LinkList InsertList(LinkList &L,int i,int e);
void display(LNode *head);

int _tmain(int argc, _TCHAR* argv[])
{
	LNode *p;LinkList L;
	cout<<"头插法创建新链表(-1结束):";
	List_HeadInsert(L);
	cout<<"链表为:";
	display(L);
	cout<<"尾插法创建新链表(-1结束):";
	List_TailInsert(L);
	cout<<"链表为:";
	display(L);
	cout<<"创建默认链表L:";
	CreatList(L);
	display(L);
	InsertList(L,6,666);
	cout<<"在第6个位置插入666:";
    display(L);
	Delete_i(L,11);
	cout<<"删除第11个元素:";
	display(L);
	Delete_e(L,4);
	cout<<"删除4:";
	display(L);
	system("pause");
	return 0;
}

LinkList List_HeadInsert(LinkList &L)
{
	L=new LNode;
	L->next=NULL;
	LNode *p;int x;
	cin>>x;
	while(x!=-1)
	{
		p=new LNode;
		p->data=x;
		p->next=L->next;
		L->next=p;
		cin>>x;
	}
	return L;
}

LinkList List_TailInsert(LinkList &L)
{
	L=new LNode;
	LNode *p,*r=L;int x;
	cin>>x;
	while(x!=-1)
	{
		p=new LNode;
		p->data=x;
		r->next=p;
		r=p;
		cin>>x;
	}
	r->next=NULL;
	return L;
}

LNode *GetElem(LinkList L,int i)
{
	if(i==1)
		return L->next;
	if(i<1)
		return false;
	LNode *p=L->next;
	int x=1;
	while(p!=NULL&&x<i)
	{
		p=p->next;
		x++;
	}
	return p;
}	

LNode *LocateElem(LinkList L,int e)
{
	LNode *p=L->next;
	while(p!=NULL&&p->data!=e)
	{
		p=p->next;
	}
	if(p!=NULL)
		return p;
	else 
		return false;
}

LinkList Delete_i(LinkList &L,int i)
{
	if(i==1)
	{
		LNode *p=L->next;
		L->next=p->next;
		free(p);
	}

	LNode *p,*q=GetElem(L,i-1);
	p=q->next;
	q->next=p->next;
	free(p);
	return L;
}

LinkList Delete_e(LinkList &L,int e)
{
	LNode *p,*q=LocateElem(L,e);
	p=q->next;
	q->data=p->data;
	q->next=p->next;
	free(p);
	return L;
}

LinkList CreatList(LinkList &L)
{
	L=new LNode;
	LNode *p,*r=L;
	int a[10]={1,2,3,4,5,6,7,8,9,10};
	for(int i=0;i<10;i++)
	{
		p=new LNode;
		p->data=a[i];
		r->next=p;
		r=p;
	}
	r->next=NULL;
	return L;
}

LinkList InsertList(LinkList &L,int i,int e)
{
	if(i==1)
	{
		LNode *p=new LNode;
		p->data=e;
		p->next=L->next;
		L->next=p;
	}
	LNode *p,*q=GetElem(L,i-1);
	p=new LNode;
	p->data=e;
	p->next=q->next;
	q->next=p;
		return L;
}

void display(LNode *head)
{
	LNode *p=head->next;
	while(p)
	{   
		cout<<p->data<<"  ";
		p=p->next;
	}
	cout<<endl<<endl;
}

ここに画像を挿入説明

リリース3元の記事 ウォンの賞賛0 ビュー57

おすすめ

転載: blog.csdn.net/weixin_43656327/article/details/104604805