1.简单的链表结构体
typedef struct node_s
{
int data; /结构体的数据域/
struct node_s *next; /指向下一个节点的指针域/
}node_t;
2.单链表尾插法的结构示意图
3.单链表头插法的结构示意图
/*********************************************************************************
* Copyright: (C) 2021 jiaoer237
* All rights reserved.
*
* Filename: list.c
* Description: This file
*
* Version: 1.0.0(11/17/2021)
* Author: yanp <2405204881@qq.com>
* ChangeLog: 1, Release initial version on "11/17/2021 02:54:30 PM"
*
********************************************************************************/
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define LEN 5
//#define LIST_HEAD_INSERT /*条件编译分别使用头插法和尾插法实现链表*/
#define LIST_TAIL_INSERT
typedef struct node_s
{
int data;
struct node_s *next;
}node_t;
int main(int argc,char **argv)
{
node_t *head=NULL;
node_t *new_node;
node_t *tail;
node_t *p;
int i;
/*创建一个长度为LEN的链表*/
for(i=0;i<LEN;i++)
{
/*使用melloc创建新节点,并给data和next指针域赋初值*/
new_node=(node_t *)malloc(sizeof(node_t));
memset(new_node,0,sizeof(node_t));
new_node->next=NULL;
printf("请输入第%d个元素的数据值\n",i);
scanf("%d",&new_node->data);
#ifdef LIST_TAIL_INSERT /*尾插法表示的链表*/
/*假如head指向NULL,表示链表为空则头指针指向第一个节点*/
if(head==NULL)
{
head=new_node;
}
/*不是空链表,则把尾指针指向节点的next指针域指向新节点,并把尾指针指向新节点*/
else
{
tail->next=new_node;
}
tail=new_node;
#elif(defined LIST_HEAD_INSERT)/*头插法表示的链表*/
new_node->next=head;
head=new_node;
#endif
}
/*链表显示*/
printf("链表的数据成员是:\n");
for(p=head;p!=NULL;p=p->next)
{
printf("%d\n",p->data);
}
return 0;
}
运行输出尾插法和头插法的结果: