当前位置: 首页 > news >正文

02.05

1.单链表

main

#include "1list_head.h"
int main(int argc, const char *argv[])
{
//创建链表之前链表为空Linklist head=NULL;int n;datatype element;printf("please enter n:");scanf("%d",&n);for(int i=0;i<n;i++){printf("please enter %d element:",i+1);scanf("%d",&element);//11head=insert_rear(element,head);		}Output(head);//头删head=delete_head(head);Output(head);//尾删		head=delete_rear(head);Output(head);//按位置插入int pos;printf("please enter insert pos:");scanf("%d",&pos);printf("please enter insert element:");scanf("%d",&element);head=insert_pos(pos,element,head);Output(head);//按位置删除printf("please enter delete pos:");scanf("%d",&pos);head=delete_pos(pos,head);Output(head);	return 0;
}

list.c

#include "1list_head.h"
//创建链表节点
Linklist create_node()
{Linklist s=(Linklist)malloc(sizeof(struct Node));if(NULL==s)return NULL;//s节点的数据域清0s->data=0;s->next=NULL;return s;
}
//尾插
Linklist insert_rear(datatype element,Linklist head)
{Linklist s=create_node();if(NULL==s)return head;s->data=element;if(NULL ==head){head=s;}else {Linklist p=head;while(p->next!=NULL){p=p->next;}p->next=s;}return head;}
//头插
Linklist insert_head(datatype element,Linklist head)
{Linklist s=create_node();if(NULL==s)return head;s->data=element;if(NULL==head){head=s;}else {s->next=head;head=s;}return head;
}
//尾删
Linklist delete_rear(Linklist head)
{if(NULL ==head)return head;if(NULL ==head->next){free(head);head=NULL;}else {Linklist del=head;while(del->next->next!=NULL){del=del->next;}free(del->next);del->next=NULL;}return head;
}
//头删
Linklist delete_head(Linklist head)
{if(NULL==head){return head;}else if(head->next==NULL){Linklist p=head;free(p);p=NULL;}else {Linklist del=head;head=head->next;free(del);del=NULL;}return head;
}
//按位置插入
Linklist insert_pos(int pos,datatype element,Linklist head)
{if( pos<1 || pos>Length(head)+1)return head;if(NULL==head || pos==1)//判断是否只有一个节点head=insert_head(element,head);else {Linklist p=head;for(int i=1;i<pos-1;i++){p=p->next;}Linklist s=create_node();if(NULL==s)return head;s->data=element;s->next=p->next;p->next=s;}return head;}
//按位置删除
Linklist delete_pos(int pos,Linklist head)
{if(NULL==head || pos<1 || pos>Length(head)){return head;}if(head->next==NULL ||pos==1)//只有一个节点{head=delete_head(head);}else //存在多个节点 >=2{Linklist p=head;for(int i=1;i<pos-1;i++){p=p->next;}Linklist q=p->next;p->next=q->next;free(q);q=NULL;}return head;
}
//遍历
int Output(Linklist head)
{//1.判断链表为空if(NULL==head)return -1;//2,循环输出Linklist p=head;while(p!=NULL){printf("%d\t",p->data);p=p->next;//后移}puts("");return 0;
}
//计算长度
int Length(Linklist head)
{int count=0;Linklist p=head;while(p!=NULL){count++;p=p->next;}return count;
}

head

#ifndef __HEAD_H__
#define __HEAD_H__
#include "myhead.h"
typedef int datatype;
//创建节点结构体
typedef struct Node
{//数据域:存储数据元素datatype data;//指针域:存储下一个节点的地址struct Node *next;
}*Linklist;//创建链表节点
Linklist create_node();//尾插
Linklist insert_rear(datatype element,Linklist head);
//头插
Linklist insert_head(datatype element,Linklist head);
//尾删
Linklist delete_rear(Linklist head);
//头删
Linklist delete_head(Linklist head);
//按位置插入
Linklist insert_pos(int pos,datatype element,Linklist head);
//按位置删除
Linklist delete_pos(int pos,Linklist head);
//遍历
int Output(Linklist head);
//计算长度
int Length(Linklist head);#endif

2.双向

main

#include "doublelink_head.h"
int main(int argc, const char *argv[])
{Doublelink head=NULL;int n;datatype element;printf("please enter n:");scanf("%d",&n);for(int i=0;i<n;i++){printf("please enter %d element:",i+1);scanf("%s",element);head=doublelink_insert_rear(element,head);}Output(head);//头删head=delete_head(head);Output(head);//尾删head=delete_rear(head);Output(head);return 0;
}

list.c

#include "doublelink_head.h"
//创建节点
Doublelink create_node()
{Doublelink s=(Doublelink)malloc(sizeof(struct Node));if(NULL==s)return NULL;strcpy(s->data,"");s->next=s->priv=NULL;return s;
}
//头插
Doublelink double_insert_head(datatype element,Doublelink head)
{Doublelink s=create_node();if(s==NULL)return head;strcpy(s->data,element);if(NULL ==head)head=s;else{s->next=head;head->priv=s;head=s;}return head;}
//遍历
int Output(Doublelink head)
{if(NULL ==head)return -1;//正向puts("正向遍历\n");Doublelink p=head;while(p->next!=NULL){printf("%s\t",p->data);p=p->next;}printf("%s\t",p->data);//逆向puts("\n逆向遍历");while(p!=NULL){printf("%s\t",p->data);p=p->priv;	}puts("");return 0;
}//尾插
Doublelink doublelink_insert_rear(datatype element,Doublelink head)
{Doublelink s=create_node();if(s==NULL)return head;strcpy(s->data,element);if(NULL ==head)head=s;else{Doublelink p=head;while(p->next!=NULL){p=p->next;}p->next=s;s->priv=p;}return head;}
//头删
Doublelink delete_head(Doublelink head)
{if(NULL==head)return head;Doublelink q=head;head=head->next;if(head!=NULL)head->priv=NULL;free(q);q=NULL;return head;
}
//尾删
Doublelink delete_rear(Doublelink head)
{if(NULL ==head)return head;if(head->next==NULL){free(head);head=NULL;}else //>=2{Doublelink p=head;while(p->next!=NULL){p=p->next;}p->priv->next=NULL;free(p);p=NULL;}return head;
}

head.h


#ifndef __DOUBLELINK_HEAD_H__
#define __DOUBLELINK_HEAD_H__
#include "myhead.h"typedef char datatype[30];//datatype-->char [30]
//定义结构体
typedef struct Node
{//数据域:存储数据元素datatype data;//指针域:存储下一个节点的地址struct Node *next;//指针域:存储上一个节点的地址struct Node *priv;
}*Doublelink;int Output(Doublelink head);
Doublelink double_insert_head(datatype element,Doublelink head);
Doublelink create_node();
Doublelink doublelink_insert_rear(datatype element,Doublelink head);
Doublelink delete_head(Doublelink head);
Doublelink delete_rear(Doublelink head);
#endif

http://www.lryc.cn/news/295076.html

相关文章:

  • 【C语言】贪吃蛇 详解
  • Mysql MGR搭建
  • 新火种AI|寒武纪跌落神坛!七年连亏50亿,AI芯片第一股不行了吗?
  • three.js CSS3DObject、CSS2DObject、CSS3DSprite、Sprite的作为标签的区别
  • 第7节、双电机直线运动【51单片机+L298N步进电机系列教程】
  • 【C语言 - 哈希表 - 力扣 - 相交链表】
  • C++参悟:内存管理-unique_ptr
  • 【征稿已开启】第五大数据、人工智能与软件工程国际研讨会(ICBASE 2024)
  • Vue3父子组件传参
  • SpringBoot整理-微服务
  • 服务器和CDN推荐
  • c#读取csv文件中的某一列的数据
  • 不懂快团团大团长对接?凭什么快团团的钱轮到你赚?
  • OpenGL 入门(九)—Material(材质)和 光照贴图
  • jmeter-03界面介绍
  • 探究 MySQL 中使用 where 1=1 是否存在性能影响
  • VSCode无法启动:Waiting for server log...
  • VMware虚拟机清理瘦身
  • Coil:Android上基于Kotlin协程的超级图片加载库
  • 时间序列(Time-Series)MultiWaveletCorrelation.py代码解析
  • C++的缺省参数和函数重载
  • nginx upstream server主动健康检测模块ngx_http_upstream_check_module 使用和源码分析(上)
  • 第01课:自动驾驶概述
  • Docker进阶篇-CIG重量级监控系统
  • 鸿蒙踩坑合集
  • Golang-Map有序输出——使用orderedmap库实现
  • 基础数学问题整理
  • 【Linux】环境基础开发工具的使用(一)
  • 突破编程_C++_面试(基础知识(5))
  • 十分钟掌握Go语言==运算符与reflect.DeepEqual函数处理interface{}值的比较规则