sizeof 指针数据结构-单链表基本操作-C语⾔代码单链表基本操作
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);
return0;
}
运⾏结果如下:
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指向终端结点,以便于接纳下⼀个到来的结点
}
r ->next =NULL;// 数组a中所有的元素都已经装⼊链表L中,L的终端结点的指针域置为NULL,L建⽴完成}
//打印链表数据
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)//每5个元素作为⼀⾏
{
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]);
}
//测试尾插法建⽴链表
createlistR(L,a,n);
//查看建⽴后的链表
printfList(L);
return0;
}
运⾏结果如下:
3.查结点
#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;
L ->next = 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)//每5个元素作为⼀⾏
{
{
printf("\n");
}
}
printf("\n");
}
//在链表L中查与e相等的元素,到的话返回其位置,否则返回未到。int searchElem(LNode *L,int e)
{
LNode *temp = L;
int i =1;
int p =0;
while(temp ->next)
{
temp = temp ->next;
if(e == temp->data)
{
p = i;
printf("到了与%d相等元素位置为%d\n",e,p);
return1;
}
i++;
}
printf("抱歉,没有到!");
return-1;
}
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);
//测试查结点
int e;
printf("请输⼊要查的结点:");
scanf("%d",&e);
searchElem(L,e);
return0;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论