链表的创建,插入,输出
本周学习了链表的创建,插入,输出,下面为学习内容。
前提
首先我们需要创建一个结构体,以便之后进行链表的相关操作
结构体分为数据域和指针域
数据域用来存放数据,指针域指向下一个节点
下面是代码:
typedef struct node
{
int data;
struct node* next;
}Node, * pNode;//*pNode指向Node,方便以后创建之类的操作
正文
一:链表的创建
下面是代码:
void creast(pNode head, int n)
{
head->next = NULL;//创建头节点指向NULL
pNode tail;
tail = head;//指针指向头节点
int i = 0;
int sum;
for (i = 0; i < n; i++)
{
scanf("%d", &sum);
pNode pnew = (pNode)malloc(sizeof(Node));//申请空间,创建新的节点
pnew->data = sum;//给数据域输入数据
pnew->next = tail->next;//让该节点指向下一个节点
tail->next = pnew;//让上一个节点指向该节点
tail = pnew;//把指针指向最后一个节点,方便下一次的节点插入
}
tail->next = NULL;//插入完毕后让最后一个节点指向NULL
}
二:链表的插入
下面是代码:
void charu(pNode head, int m, int n)//m是n
{
pNode p;
p = head;//先指向头结点
int j = 1;
while (j < m && p->next)//找到要插入的位置
{
p = p->next;
j++;
}
pNode new = (pNode)malloc(sizeof(Node));//申请要插入节点的内存
new->data = n;//输入数据
new->next = p->next;//该节点指针域指向下一个节点
p->next = new;//原来的节点指向该节点
}
三:链表的输出
下面是代码:
void shuchu(pNode head)
{
pNode p = head;
p = p->next;
while (p)//当p不是NULL时进入循环
{
printf("%d ", p->data);//输出数据
p = p->next;//从原节点指向下一个节点
}
}
完整的代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node* next;
}Node, * pNode;
void creast(pNode head, int n)
{
head->next = NULL;
pNode tail;
tail = head;
int i = 0;
int sum;
for (i = 0; i < n; i++)
{
scanf("%d", &sum);
pNode pnew = (pNode)malloc(sizeof(Node));
pnew->data = sum;
pnew->next = tail->next;
tail->next = pnew;
tail = pnew;
}
tail->next = NULL;
}
void charu(pNode head, int m, int n)
{
pNode p;
p = head;
int j = 1;
while (j < m && p->next)
{
p = p->next;
j++;
}
pNode new = (pNode)malloc(sizeof(Node));
new->data = n;
new->next = p->next;
p->next = new;
}
void shuchu(pNode head)
{
pNode p = head;
p = p->next;
while (p)
{
printf("%d ", p->data);
p = p->next;
}
}
int main()
{
int m, t;
int n;
printf("请输入要创建的链表的大小:\n");
scanf("%d", &n);
pNode head = (pNode)malloc(100);
head->next = NULL;
printf("请输入数据:\n");
creast(head, n);
printf("请输入要插的位置和数值:\n");
scanf("%d %d", &m, &t);
charu(head, m, t);
shuchu(head);
return 0;
}
运行结果如下:
已经到底啦!!