1. 单向链表

/*创建单向链表*/
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>struct LNode{int data;struct LNode * next;
};//该函数创建一个单向链表
struct LNode * create(int n){int i;struct LNode * head,*p1,*p2;  //head头指针,p1为新建指针,p2指向链表末尾int a;head=NULL;printf("输入整数:\n");for(i=n;i>0;--i){p1=(struct LNode *)malloc(sizeof(struct LNode));scanf("%d",&a);p1->data=a;if(head==NULL){head=p1;p2=p1;}else{p2->next=p1;p2=p1;}}p2->next=NULL;return head;
};int main()
{int n;struct LNode * q;printf("输入你想创建的节点个数:\n");scanf("%d",&n);q=create(n);printf("结果是:\n");while(q){  //输出链表printf("%d ",q->data);q=q->next;}return 0;
}

2. 创建双向链表

/*创建双向链表*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>typedef struct node{char name[20];struct node * prior,*next;
}stud;  //双向链表的结构定义//创建一个双向链表
stud * creat(int n){stud * p,*h,*s;  //p指向尾节点,h指向头节点,s为新建节点int i;h=(stud *)malloc(sizeof(stud));h->name[0]='\0';h->prior=NULL;h->next=NULL;p=h;for(i=0;i<n;++i){s=(stud *)malloc(sizeof(stud));p->next=s;printf("输入第%d个学生的姓名:",i+1);scanf("%s",s->name);s->prior=p;s->next=NULL;p=s;}p->next=NULL;return h;
}//该函数实现查找要删除的节点
stud * search(stud *h,char *x){stud *p;char *y;p=h->next;while(p){y=p->name;if(strcmp(y,x)==0)  //判断字符串y是否和要查找的字符串x一致return p;elsep=p->next;}printf("没有找到数据!\n");
}//删除链表中指定的节点
void del(stud *p){p->next->prior=p->prior;p->prior->next=p->next;free(p);
}int main()
{int number;char sname[20];stud * head,*sp;puts("请输入链表的大小:");scanf("%d",&number);head=creat(number);sp=head->next;printf("\n现在这个双链表是:\n");while(sp){printf("%s ",&*(sp->name));sp=sp->next;}printf("\n\n请输入你想查找的姓名:\n");scanf("%s",sname);sp=search(head,sname);printf("你想查找的姓名是:%s\n",*&sp->name);del(sp);sp=head->next;printf("\n现在这个双链表是:\n");while(sp){printf("%s ",&*(sp->name));sp=sp->next;}return 0;
}

3. 创建循环链表

/*创建循环链表*/
#include <stdio.h>
#include <stdlib.h>//声明struct student类型
typedef struct student{int num;struct student * next;
}LNode,*LinkList;//自定义函数create(),实现创建一个循环链表
LinkList create(void){LinkList head;  //head指向头LNode *p1,*p2;  //p1指向新建节点,p2指向尾节点char a;head=NULL;a=getchar();while(a!='\n'){p1=(LNode *)malloc(sizeof(LNode));p1->num=a;if(head==NULL){head=p1;}else{p2->next=p1;}p2=p1;a=getchar();}p2->next=head;  //尾节点指向头节点return head;
}int main()
{LinkList L1,head;printf("请输入循环链表 \n");L1=create();head=L1;printf("这个合成的链表是:\n");printf("%c",L1->num);L1=L1->next;while(L1!=head){  //循环到头节点结束printf("%c",L1->num);L1=L1->next;}return 0;
}

C语言实现单向链表、双向链表、循环链表相关推荐

  1. C语言之链表:单向链表,循环链表,双向链表

    C语言之链表:单向链表,循环链表,双向链表 提起链式存储结构,其与数组是两个非常基础的数据结构,每当提到链式存储结构时,一般情况下我们都会将其与数组放到一块儿来比较. 对于数组与链表,从结构上来看,数 ...

  2. 可由一个尾指针唯一确定的链表有_L2数据结构第08课 单向链表和循环链表

    L2-数据结构-第08课 单向链表和循环链表 线性表 线性表是一种常用的数据结构,其中的每一个元素(结点)都有唯一的前驱和唯一的后续.当然,第一个元素只有后续,最后一个元素只有前驱. 线性表一般分为& ...

  3. c语言链表如何做成环,在C语言中单向链表环测试并返回环起始节点的实现方法...

    小编想问大家一个问题,就是如果我们需要进行测试一个单向链表是否存在环,应该使用什么方法才是最好的呢?如果大家还不知道有什么方法的话,那就接着往下面看哟!因为今天小编就要为大家介绍一下:在C语言中单向链 ...

  4. C语言的单向链表的操作方法

    写写基于C语言的单向链表的基本操作的实现, 包括输入初始化. 判断链表是否为空. 获取链表的长度. 在链表指定位置插入数据. 修改指定位置的数据. 删除指定位置的数据. 查找指定位置的数据内容. 查找 ...

  5. 数据结构 (二) ----- 单向链表双向链表

    相关文章: <数据结构 (一) ----- 数据结构基本概念&基于数组实现线性表> <数据结构 (二) ----- 单向链表&双向链表> 文章目录 单链表 一. ...

  6. 单向链表 双向链表 java代码实现

    文章目录 单向链表 代码实现 单元测试 控制台打印 头插法 尾插法 双向链表 代码实现 单元测试 控制台打印 头插法 尾插法 单向链表 代码实现 package csdn.dreamzuora.lis ...

  7. java 单向链表 双向链表_java 单向链表与双向链表的实现

    链表 单向链表 单向链表概念 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的. 这是一种物理结构,不是树那样的逻辑结构.链表和顺序表两种物理结构, ...

  8. 数据结构——单向链表-双向链表

    1.单向链表按位置修改 //按位置修改 int updata_pos(linklist *L,int pos,datatype new_e) {if(NULL==L||empty(L)||pos< ...

  9. c语言单向链表插入字符串,C语言之单向链表

    1,单向链简洁. 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始:链表是使用指针进行构造的列表:又称为结点列表,因为链表是由一个个结点组装起来的: ...

最新文章

  1. 22个超详细的 JS 数组方法
  2. Qt 控件渐变隐藏消失
  3. java%4d_java积累
  4. nssl1447-小智的糖果【dp】
  5. 【leetcode】Remove Duplicates from Sorted Array
  6. Seeing this, many people find it incredible
  7. pip国内镜像源矩池云收集(2020年8月)
  8. SRM 567 div2
  9. IOS NSLayoutConstraint 页面布局(通过代码添加约束)
  10. PMP试题 | 每日一练,快速提分 9.3
  11. win7 x64怎么枚举所有快捷键呢
  12. Coreset-Based Neural Network Compression简记
  13. 火车头 php 插件,插件 - 火车采集器官方博客
  14. 什么是APS计划排程系统和生产计划排产系统?
  15. python数据可视化之美pdf_数据之美——Python数据可视化1
  16. 90后迎来30岁,比升职更重要的是这8件事
  17. 解决strongOD与olly advanced插件冲突问题
  18. 这100 个网络基础知识,看完成半个网络高手
  19. JAVA----动态初始化数组的null判断
  20. 这没啥挑的,全新java前后端开发需掌握的框架及技术

热门文章

  1. python和java的区别-Java和Python的区别 学Python语言好还是Java好
  2. python和c先学哪个-python和c,应该先学哪个?
  3. 当启动vue项目安装依赖时报错
  4. Vue中computed 计算机属性、getter、setter
  5. python读取idx_使用groupby和transform获取idxmaxp
  6. java swing 最小化到托盘_用Java实现程序最小化到托盘区
  7. sql server 创建数据库 语法
  8. mysql email能索引吗_10、MySQL索引
  9. Node.js Error: Cannot find module express
  10. Mybatis 处理日期格式自动转换