Realice una lista de enlace único basada en lenguaje C (con dos códigos detallados completos + resultados de simulación)

Realice la lista enlazada individualmente en la estructura de datos con la ayuda del lenguaje C de forma modular (con dos códigos detallados completos)

Tabla de contenido

prefacio

1. ¿Qué es una lista enlazada?

2. Lista enlazada simple

1. Código

2. Simulación

 2. Aplicación simple de lista enlazada única --- sistema de gestión de estudiantes

1. Código

2. Simulación

Resumir


prefacio

        Una lista enlazada es una colección del mismo tipo de datos y no ocupa espacio de memoria continuo. Es adecuado para un espacio de almacenamiento clasificado discontinuo pero requiere una gran cantidad de espacio de almacenamiento continuo (similar a los archivos) La desventaja es que la velocidad de recuperación es lenta y el tiempo empleado no es fijo. Este artículo utiliza una sola lista vinculada para ilustrar el uso de listas vinculadas, incluido el uso de la creación de encabezados de listas vinculadas, la creación de nodos, la eliminación de nodos en ubicaciones específicas, el recorrido e impresión de nodos, la inserción de nodos por inserción de cabeza y la inserción de nodos por inserción de cola. .


Sugerencia: El siguiente es el texto principal de este artículo. No es fácil escribir un artículo. Espero que pueda ayudarlo. Adjunte un enlace al reimprimirlo.

1. ¿Qué es una lista enlazada?

         Para decirlo sin rodeos, una lista enlazada es una colección de estructuras, una colección del mismo tipo de datos, y no ocupa espacio de memoria continuo.El puntero de estructura se cambia a una variable de estructura a través de la aplicación de memoria dinámica, y se usa la variable de estructura para operar la lista enlazada. Es adecuado para un espacio de almacenamiento clasificado discontinuo pero requiere una gran cantidad de espacio de almacenamiento continuo (similar a los archivos) La desventaja es que la velocidad de recuperación es lenta y el tiempo empleado no es fijo.

2. Lista enlazada simple

1. Código

el código se muestra a continuación:

#include <stdio.h>
#include <stdlib.h>
struct Node
{
    int data;
    struct Node *next;
};
//创建链表表头 
struct Node *creatlist()//结构指针经动态内存申请变成结构体变量 
{
    struct Node *headNode=(struct Node*)malloc(sizeof(struct Node));
    headNode->next=NULL;
    return headNode;
};
//创建节点,要插入节点得先有节点 
struct Node *creatNode(int data)
{
    struct Node *newNode=(struct Node*)malloc(sizeof(struct Node));
    newNode->data=data;
    newNode->next=NULL;
    return newNode;
};
//打印,除去表头,从第二个节点开始遍历打印 
void printList(struct Node *headNode)
{
    struct Node *Pmove=headNode->next;
    while(Pmove)
    {
        printf("%d\t",Pmove->data);
        Pmove=Pmove->next;
    }
    printf("\n");
}
//插入节点 头插法 
void insert_Node_By_HeadNode(struct Node *headNode,int data)
{
    struct Node *newNode=creatNode(data);//首先创建要插入的节点 
    newNode->next=headNode->next;//创建完后插入 
    headNode->next=newNode;
}
//尾插法
void insertNodebyRear(struct Node *headNode, int data)
{
	struct Node *newNode=creatNode(data);
	while(headNode->next)
	{
		headNode = headNode->next;
	}
	headNode->next = newNode;
	newNode->next = NULL;
}
//指定位置删除
void deleteNoteByAppoin(struct Node *headNode,int posData)
{
	struct Node *posNode=headNode->next;
	struct Node *posNodeFront=headNode;
	if(posNode==NULL)
	{
		printf("无法删除链表为空\n");
	} 
	else
	{
		while(posNode->data!=posData)
		{
			posNodeFront=posNode;
			posNode=posNodeFront->next;
			if(posNode==NULL)
			{
				printf("没有找到相关信息无法删除\n");
				return;
			}
		}
		posNodeFront->next=posNode->next;
		free(posNode);
	}
 } 
int main()
{
    struct Node *list=creatlist();
    insert_Node_By_HeadNode(list,1);
    insert_Node_By_HeadNode(list,2);
    insert_Node_By_HeadNode(list,3);
    printList(list);
    deleteNoteByAppoin(list,1);
    printList(list);
    insertNodebyRear(list,4);
    insertNodebyRear(list,5);
    printList(list);
    system("pause");
    return 0;
}

2. Simulación

Resultados de la simulación

 2. Aplicación simple de lista enlazada única --- sistema de gestión de estudiantes

1. Código

el código se muestra a continuación:

#include <stdio.h>
#include <stdlib.h>
struct student
{
	char name[20];//姓名
	int num;//学号
	int math;//成绩
 }; 
struct Node
{
    struct student date;
    struct Node *next;
};
//创建链表表头 
struct Node *creatlist()//结构指针经动态内存申请变成结构体变量 
{
    struct Node *headNode=(struct Node*)malloc(sizeof(struct Node));
    headNode->next=NULL;
    return headNode;
};
//创建节点,要插入节点得先有节点 
struct Node *creatNode(struct student date)
{
    struct Node *newNode=(struct Node*)malloc(sizeof(struct Node));
    newNode->date=date;
    newNode->next=NULL;
    return newNode;
};
//打印,除去表头,从第二个节点开始遍历打印 
void printList(struct Node *headNode)
{
	printf("name\tnum\tmath\n");
    struct Node *Pmove=headNode->next;
    while(Pmove)
    {
        printf("%s\t%d\t%d\n",Pmove->date.name,Pmove->date.num,Pmove->date.math);
        Pmove=Pmove->next;
    }
    printf("\n");
}
//插入节点 头插法 
void insert_Node_By_HeadNode(struct Node *headNode,struct student date)
{
    struct Node *newNode=creatNode(date);//首先创建要插入的节点 
    newNode->next=headNode->next;//创建完后插入 
    headNode->next=newNode;
}
//尾插法
void insertNodebyRear(struct Node *headNode, struct student data)
{
	struct Node *newNode=creatNode(data);
	while(headNode->next)
	{
		headNode = headNode->next;
	}
	headNode->next = newNode;
	newNode->next = NULL;
}
//指定位置删除,通过学号删除 
void deleteNoteByAppoinNum(struct Node *headNode,int num)
{
	struct Node *posNode=headNode->next;
	struct Node *posNodeFront=headNode;
	if(posNode==NULL)
	{
		printf("无法删除链表为空\n");
	} 
	else
	{
		while(posNode->date.num!=num)
		{
			posNodeFront=posNode;
			posNode=posNodeFront->next;
			if(posNode==NULL)
			{
				printf("没有找到相关信息无法删除\n");
				return;
			}
		}
		posNodeFront->next=posNode->next;
		free(posNode);
	}
 } 
int main()
{
    struct Node *list=creatlist();
	struct student info;
	while(1)
	{
		printf("学生的姓名 学号 数学成绩:");
		setbuf(stdin,NULL);//清除缓存 
		scanf("%s%d%d",info.name,&info.num,&info.math);
		insertNodebyRear(list,info);
		printf("continue(1/0)?\n");
		setbuf(stdin,NULL);
		int choice=0;
		scanf("%d",&choice);
		if(choice==0)
		{
			break;
		}
	}
    printList(list);
    printf("要删除学生的学号:");
    int a;
    setbuf(stdin,NULL);
    scanf("%d",&a);
    deleteNoteByAppoinNum(list,a);
    printList(list);
    system("pause");
    return 0;
}

2. Simulación

Resultados de la simulación

 Link de referencia:

1 hora para aprender lista enlazada individual, estructura de datos en lenguaje C topic_哔哩哔哩_bilibili


Resumir

        Lo anterior es de lo que quiero hablar hoy. Este artículo presenta cómo usar la lista enlazada única. Espero que sea útil para todos.

Supongo que te gusta

Origin blog.csdn.net/m0_66360845/article/details/129209474
Recomendado
Clasificación