#include<stdio.h> #include<malloc.h> #include<stdbool.h> /** **链表节点的定义 */ typedef struct Node{ int data;//数据域 struct Node * PNext;//指针域,存放下一个节点的地址 } Node ,* PNode ; /** **创建链表 */ PNode create_list() { int len,i; printf("请输入链表的长度:len=\n"); scanf("%d",&len); PNode PHead=malloc(sizeof(Node)); PHead->PNext=NULL; PNode PTail=PHead;//PTail是永远指向尾节点的指针 for(i=0;i<len;i++) { int val; printf("请输入第 %d 个元素的值:", i+1); scanf("%d",&val); PNode PNew=malloc(sizeof(Node)); PNew->data=val; PNew->PNext=NULL; PTail->PNext=PNew; PTail=PNew; } return PHead; } /** **对链表进行遍历 */ void traverse(PNode pHead) { PNode p=pHead->PNext; while(p!=NULL) { printf("%d ",p->data); p=p->PNext; } printf("\n"); } /** *推断链表是否为空 */ bool isempty(PNode pHead) { if(NULL==pHead->PNext) { return true; }else{ return false; } } /** **获取链表的长度 */ int list_num (PNode pHead) { int num=0; PNode p=pHead->PNext; while(p!=NULL) { num++; p=p->PNext; } return num; } /** *向链表中插入元素 */ bool insert_list(PNode pHead,int val ,int pos){ //须要找到第pos个位置。而且须要推断这个位置pos是否合法 //i是p所指节点的位置,所以从一開始。为什么要pos-1呢,由于用的是while 当i=pos-1时跳出循环 int i=0; PNode p=pHead; while(NULL!=p&&i<pos-1) { i++; p=p->PNext; } //假设插入位置过大,那么P=NULL, //假设插入的位置是0或者负数,那么i>pos-1 if(i>pos-1||NULL==p) { printf("插入位置不合法\n"); return false; } PNode PNew=malloc(sizeof(PNode)); PNew->data=val; PNode temp=p->PNext; p->PNext=PNew; PNew->PNext=temp; return true; } /** **在链表中删除节点 */ delete (PNode PHead,int pos , int * pval) { int i=0; PNode p=PHead; //我们要删除p后面的节点,所以p不能指向最后一个节点 p->next!=NULL while(p->PNext!=NULL&&i<pos-1){ p=p->PNext; i++; } if(i>pos-1||p->PNext==NULL) { printf("删除位置不合法\n"); return false; } PNode temp=p->PNext; p->PNext=temp->PNext; free(temp); } int main() { PNode PHead= create_list(); if(isempty(PHead)) printf("链表为空\n"); printf("链表的长度为:%d\n",list_num(PHead)); traverse(PHead); //insert_list(PHead,55,1); int val; delete(PHead,6,&val); traverse(PHead); return 0; }
数据结构基础(3)---C语言实现单链表
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
上一篇:C语言scanf函数详解
下一篇:C语言编写静态链接库及其使用
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
【数据结构】C语言实现顺序栈
【数据结构】第三章——栈、队列和数组详细介绍通过C语言实现顺序栈
数据结构 C语言 顺序栈 -
数据结构--单链表(C语言实现)
单链表简单实现
C语言 数据结构 单链表 -
(数据结构)C语言实现单链表队列
p = (Queue *)malloc(sizeof(Node));,个人觉得这是错误的。另外,有人初始化...
数据结构 队列 C语言 #include 初始化 -
数据结构】单链表的c语言实现
数据结构 ,单链表, c语言
数据结构 单链表 c语言 -
数据结构之链表篇——C++语言实现
在数据结构的学习中,链表是动态数据结构的最基本的形式,也是最常见的一种线性数据结构,使用范围广。
链表 #include 删除节点 -
c语言实现通用数据结构(一):通用链表
忽然想起来,大概在两年之前学习C语言的时候,曾经用C语言写过
数据 链表 #include