C / c ++は、単一リンクリストの追加と削除を実現します

データ構造アルゴリズムの単一リンクリストの原理と実現

リンクリストは、シーケンシャルテーブルのチェーンストレージ構造です。チェーンストレージ構造とは、自転車のチェーンのようにデータを接続することです。これは、物理アドレスが隣接していることを意味するものではありません。代わりに、一連のアドレスは、アドレスを登録するためのポインターを介してチェーンにストリング化されます。

リンクリストの利点:シーケンステーブルと比較して、大量の移動作業によりCPUのオーバーヘッドが増加します。リンクリストはアドレス転送操作を実行するだけで済みます。この効率は、シーケンステーブルよりも明らかに高くなります。

一般的な学習は、単一リンクリストから始まります。リンクリスト
のヘッドとしてポインタヘッドが使用され、複数のヘッドがデータ領域に接続されます。

/ **
1.初期化
2、
挿入3、後に挿入
4、任意の位置
に5を挿入、要素
7を取得、要素
6を検索
7を削除、トラバース
8、破棄

*** ///

//シングルネックレスウォッチ

ここに画像の説明を挿入します

#include<stdio.h>
#include<Windows.h>
#include<iostream>

using namespace std;

typedef int Elemdata;

typedef struct _LinkList{
    
    
	Elemdata data;
	_LinkList *next;

}List,Node;

//1、单链表初始化
bool initlist(List *&L){
    
    
	
	L = new List;
	if(!L) return false;
	L->next=NULL;
	return true;
}

//2、单链表前插法			
bool insert_front(List *&L,Node *node ){
    
    //为什么这里只用传一个一级指针,一级指针不是只是只能值得传入不能将值带出的吗
	
	if(!L||!node)return false;
	
	node->next = L->next;
	L->next=node;
	return true;

}

//3、单链表尾插法

bool insert_end(List *&L,Node *node){
    
    
	
	if(!L||!node)return		false;

	//找到最后一个结点
	Node *last = L;
	
	while(last->next){
    
    
		last=last->next;
	
	}
	
	node->next=NULL;
	last->next=node;
	return true;

}

//4、单链表任意位置插入
bool insert_pos(List *&L,int i,Elemdata &e){
    
    
	
	if(!L) return false;

	int j=0;
	List *p = L;
	Node *s;

	//找到第i个结点的前一个元素
	while(p&&j<(i-1)){
    
    
		p=p->next;
		j++;
	}


	if(!p->next||j!=(i-1)) return false;

	//找到前一个元素
	s = new Node;
	s->data=e;

	s->next = p->next;
	p->next = s;
	return true;

}

//5、查找结点为i的元素
bool getElemdata(List *L,int i,Elemdata &e){
    
    

	if(!L)return false;

	List *p = L;
	int j = 0;

	while(j<i&&p){
    
    

	
		p=p->next;
		j++;
	}

	if(j!=i&&p) return false;

	e=p->data;
	return true;


}

//6、判断元素e是否存在
bool isExitElemdate(List *L,Elemdata &e){
    
    
	
	if(!L)return false;

	int j=0;
	List *p=L->next;

	while(p&&p->data!=e){
    
    
		
		p=p->next;
		j++;
		
	}
	if(!p)return false;

	return true;


}

//7、遍历链表
void initPrint(List *&L){
    
    
	
	if(!L)return;

	List *p = L->next;

	while(p){
    
    
		
		
		printf("%d\t",p->data);
		p=p->next;
	}

	printf("\n");

}

//8、删除某个位置的结点
bool List_delete(List *&L,int i){
    
    

	if(!L) return false;

	int j=0;

	//找到要删除结点的前一个结点
	List *p = L;

	while(p->next&&j<(i-1)){
    
    
		p=p->next;
		j++;
	}

	if(!p->next||j!=i-1) return false;

	Node *d,*q;

	d = p;		//i的前一个结点
	q = p->next;//要删除的结点

	d->next = q->next;
	
	delete q;

	return true;

}

//9、销毁单链表
void List_destoyed(List *&L){
    
    
	
	if(!L) return ;
	List *p = L;

	Node *q;


	while(p){
    
    

		q = p;
		p=p->next;
		cout<<"销毁结点元素"<<q->data<<endl;
		delete q;
	
		}



}
码片

おすすめ

転載: blog.csdn.net/weixin_45825875/article/details/115013314