单链表基本操作
1.头插法建立单链表
2.尾插法建立单链表
3.查找结点
3.修改结点
4.插入结点
5.删除结点
本篇只有c语言代码,具体思路讲解请看这篇博客:数据结构-线性结构-单链表
1.头插法建立单链表
#include<stdio.h>
#include<stdlib.h>
//单链表的结构定义
typedef struct LNode
{
int data; //data存放结点数据域
struct LNode *next; //指向后继结点的指针
}LNode; //定义单链表结点类型
//头插法建立单链表
void createlistF(LNode *&L, int a[], int n)
{
LNode *s;
int i;
L = (LNode*)malloc(sizeof(LNode));
L ->next = NULL;
for(i=0;i<n;++i)
{
s = (LNode*)malloc(sizeof(LNode));
s ->data = a[i];
//下面两句为头插法的关键步骤
s ->next = L ->next; //s所指新结点的指针域next指向L中的开始结点
L ->next = s; //头结点的指针域next指向s结点,使得s成为新的开始结点
}
}
//打印链表数据
void printfList(LNode *L)
{
LNode *temp = L;
int count = 0;
printf("表中的元素为:\n");
while(temp->next)
{
temp = temp->next;
printf("%d\t",temp->data);
count++;
if(count%5==0)
{
printf("\n");
}
}
printf("\n");
}
int main()
{
LNode *L;
int n;
printf("请输入数组的个数:");
scanf("%d",&n);
int a[n];
printf("请输入数组中的数(用空格分开):\n");
for(int i=0;i<n;++i)
{
scanf("%d",&a[i]);
}
//测试头插法建立链表
createlistF(L,a,n);
//查看建立后的链表
printfList(L);
return 0;
}
运行结果如下:
2.尾插法建立单链表
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode
{
int data; //data中存放结点的数据域
struct LNode *next; //指向后继结点的指针
}LNode; //定义单链表结点类型
//尾插法建立链表
void createlistR(LNode *&L, int a[], int n) //要改变的变量用引用型
{
LNode *s,*r; //s用来指向新申请的结点,r之中指向L的终端结点
int i;
L = (LNode *)malloc(sizeof(LNode)); //申请L的头结点空间
L -> next = NULL;
r = L; // r指向头结点,因为此时头结点就是终端结点
for(i=0;i<n;++i) // 循环申请n个结点,来接受数组a中的元素
{
s = (LNode*)malloc(sizeof(LNode)); // s指新申请的结点
s ->data = a[i];// 用新申请的结点来接受a中的一个元素
r ->next = s; // 用来接纳新结点
r = r ->next; // r指向终端结点,以便于接纳下一个到来的结点