本文将详细说明如何用C语言实现数据结构链表。这篇文章的内容质量很高,所以边肖会分享给大家作为参考。希望你看完这篇文章后有所了解。
前言
需要用到的函数库
# includestdio.h
# includedmalloc.h malloc函数用于动态分配空间,相当于Java中new的角色。
先是需要创建一个节点的结构体
typedefstruct{
intdata
structlinkNode *下一步;
} linkNode00-1010
函数
votinilinklist(link node * FP){//初始化链表,传入头节点。
linkNode * point=fp//定义指向头节点的指针
for(inti=0;i5;I){ 0
linkNode * node=malloc(sizeof(linkNode));
节点数据=I;
节点-下一个=空;
点-下一个=节点;
点=点-下一个;
}
}
1. 链表初始化
intcountlistlength(link node * FP){//FP :链表头节点
linkNode * point=fp//定义指向头节点的指针
int sum=0;//用于计算链表节点数。
while(点-下一个){ 0
总和;
点=点-下一个;
}
returnsum
}
2. 计算链表长度
voitprintlinklist(link node * FP){//传入链表头节点
linkNode * point=fp//定义指向头节点的指针
Printf('链表内容如下:\ n ');
while(点-下一个){ 0
link node * node=point-next;
printf('%d\t ',节点数据);
点=点-下一个;
}
printf(' \ n ');
}
3. 打印链表
int
countListLength(linkNode *fp){//fp:链表头节点
linkNode *point = fp;//定义指针指向头节点
int sum = 0; //用来计算链表节点个数
while(point->next){
sum++;
point=point->next;
}
return sum;
}
5. 删除链表中指定位置节点
int deleteNode(int index,linkNode *fp){//index:链表中节点的下标,fp:链表头节点
linkNode *point = fp;//定义指针指向头节点
if(index<0||index>(countListLength(fp)-1)){//判断index是否有效(在链表长度范围内)
printf("下标不在链表内!");
return 1; //返回1表示删除失败
}else{
for(int i=0;i<index;i++){ //遍历找到下标前一个位置
point=point->next;
}
linkNode *node = point->next;
point->next=node->next; //删除下标位置节点
return 0; //返回0表示删除成功
}
}
6. 向链表中指定位置插入节点
void insertLinkNode(linkNode *fp,int index,int data){//index:链表中节点的下标,fp:链表头节点,data:插入的新数据
linkNode *point = fp;//定义指针指向头节点
if(index<0||index>(countListLength(fp)-1)){//判断index是否有效(在链表长度范围内)
printf("下标不在链表内!");
return;
}else{
for (int i=0;i<index;i++)
point=point->next; //找到下标位置前一个节点
linkNode *node = malloc(sizeof(linkNode));
node->data=data; //创建新节点
node->next=point->next; //将下标前一个节点的next赋值给node的next
point->next = node; //将新创建的节点的地址给下标位置前一个节点
}
}
7. 全代码+运行效果
#include<stdio.h>
#include<malloc.h>
typedef struct{
int data;
struct linkNode* next;
}linkNode;
//初始化链表
void iniLinkList(linkNode *fp){//初始化链表传入一个头节点
linkNode *point = fp;//定义一个指针指向头节点
for(int i=0;i<5;i++){
linkNode *node = malloc(sizeof(linkNode));
node->data=i;
node->next=NULL;
point->next = node;
point=point->next;
}
}
//向链表中指定位置插入节点
void insertLinkNode(linkNode *fp,int index,int data){//index:链表中节点的下标,fp:链表头节点,data:插入的新数据
linkNode *point = fp;//定义指针指向头节点
if(index<0||index>(countListLength(fp)-1)){//判断index是否有效(在链表长度范围内)
printf("下标不在链表内!");
return;
}else{
for (int i=0;i<index;i++)
point=point->next; //找到下标位置前一个节点
linkNode *node = malloc(sizeof(linkNode));
node->data=data; //创建新节点
node->next=point->next; //将下标前一个节点的next赋值给node的next
point->next = node; //将新创建的节点的地址给下标位置前一个节点
}
}
//删除链表中指定位置节点
int deleteNode(int index,linkNode *fp){//index:链表中节点的下标,fp:链表头节点
linkNode *point = fp;//定义指针指向头节点
if(index<0||index>(countListLength(fp)-1)){//判断index是否有效(在链表长度范围内)
printf("下标不在链表内!");
return 1; //返回1表示删除失败
}else{
for(int i=0;i<index;i++){ //遍历找到下标前一个位置
point=point->next;
}
linkNode *node = point->next;
point->next=node->next; //删除下标位置节点
return 0; //返回0表示删除成功
}
}
//计算链表长度
int countListLength(linkNode *fp){//fp:链表头节点
linkNode *point = fp;//定义指针指向头节点
int sum = 0; //用来计算链表节点个数
while(point->next){
sum++;
point=point->next;
}
return sum;
}
//打印链表
void printLinkList(linkNode *fp){//传入链表头节点
linkNode *point = fp;//定义指针指向头节点
printf("链表内容如下:\n");
while(point->next){
linkNode *node = point->next;
printf("%d\t",node->data);
point=point->next;
}
printf("\n");
}
int main(){
linkNode *linkList = malloc(sizeof(linkNode));//创建一个头节点
iniLinkList(linkList);
printLinkList(linkList);
deleteNode(3,linkList);
printf("删除后");
printLinkList(linkList);
insertLinkNode(linkList,3,7);
printf("插入后");
printLinkList(linkList);
return 0;
}
// 链表内容如下:
// 0 1 2 3 4
// 删除后链表内容如下:
// 0 1 2 4
// 插入后链表内容如下:
// 0 1 2 7 4
关于如何进行数据结构C语言链表的实现就分享到这里了,希望
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/151264.html
