20230330华清远见作业
作业1:单链表的按位置修改
思路:参数:L pos e
1,判断链表是否存在
2,判断链表是否为空
3,判断位置是否合法
4,找到pos起名字p
5. 修改p的数据域:重新赋值
作业2:单链表的按元素修改
思路:参数头结点L 被修改的元素key 要修改的元素e
1.根据key得到位置
2,根据位置修改
作业3:单链表的空间释放
循环删除头结点后面的所有结点
for(i=0;i
{
delete_head(L);
}
删除头
free(L)
L=NULL;
#ifndef __HEAD_H__
#define __HEAD_H__#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int datatype;
typedef struct Node
{//数据域union{int len;//头结点的数据域:链表长度datatype data;//其他结点的数据域:数据元素};//指针域:下一个节点的地址struct Node *next;
}*linklist;
linklist create_head();int delete_pos(linklist L,int pos);
int insert_pos(linklist L,int pos,datatype e);
void output(linklist L);
int insert_head(linklist L,datatype e);
linklist create_node();int insert_rear(linklist L,datatype e);int delete_rear(linklist L);
int delete_head(linklist L);int search_pos(linklist L,int pos);int search_data(linklist L,datatype key);int update_pos(linklist L,int pos,datatype e);
int delete_data(linklist L,datatype key);void ifree(linklist L);
int datachange_data(linklist L,datatype num,datatype e);
#endif
#include "head.h"
/** function: 创建头结点* @param [ in] 无参数* @param [out] :w* @return 成功返回地址失败返回NULL*/
linklist create_head()
{//L是头结点:len next//struct Node: 是结点结构体的类型linklist L=(linklist)malloc(sizeof(struct Node));if(L==NULL)return NULL;L->len=0;//为单链表清空L->next=NULL;//防止头节点的指针域为野指针return L;}
/** function: 创建结点* @param [ in] 无参数* @param [out] * @return 成功返回地址失败返回NULL*/
linklist create_node()
{linklist p=(linklist)malloc(sizeof(struct Node));if(p==NULL)return NULL;p->data=0;p->next=NULL;return p;
}
/** function: 头插* @param [ in] 链表 插入的值* @param [out] * @return 成功返回0失败返回-1*/
int insert_head(linklist L,datatype e)
{//1,判断头结点是否存在if(L==NULL)return -1;//2,插入:在头结点后面linklist p=create_node();if(p==NULL)return -1;//3,连接//p的数据域p->data=e;//p的指针域p->next=L->next;L->next=p;L->len++;return 0;
}
/** function: 链表遍历* @param [ in] 头* @param [out] * @return 无返回*/
void output(linklist L)
{puts("");//1,判断头结点是否存在//2,判断链表是否为空if(L==NULL || L->len==0){printf("遍历失败\n");return;}
#if 0//3,遍历linklist p=L;for(int i=0;i<L->len;i++)//因为使用长度,所以头结点不能动{p=p->next;//后移一步printf("%d\t",p->data);}
#else//3,遍历while(L->next!=NULL)//while(L->next){L=L->next;printf("%d\t",L->data);}#endifputs("");
}
/** function: 单链表尾插* @param [ in] 头结点 插入的值* @param [out] * @return 成功返回0失败返回-1*/
int insert_rear(linklist L,datatype e)
{//1,判断头结点是否存在if(L==NULL){printf("插入失败\n");return -1;}//2,循环到最后一个结点linklist p=L;for(int i=0;i<L->len;i++){p=p->next;}//3,在p结点后面插入slinklist s=create_node();if(s==NULL)return -1;//s的数据域s->data=e;//链接p->next=s;L->len++;
}
/** function: 头删* @param [ in] 头结点* @param [out] * @return 成功返回0失败返回-1*/
int delete_head(linklist L)
{//1,判断头结点是否存在//2,判断链表是否为空if(L==NULL || L->len==0){printf("删除失败\n");return -1;}//3,删除头结点的后继结点linklist q=L->next;L->next=q->next;//连线free(q);q=NULL;L->len--;
}
/** function: 尾删* @param [ in] 头结点* @param [out] * @return 成功返回0失败返回-1*/
int delete_rear(linklist L)
{//1,判断头结点是否存在//2,判断链表是否为空if(L==NULL || L->len==0){printf("删除失败\n");return -1;}//3,循环移动到len-1位置linklist p=L;for(int i=0;i<L->len-1;i++){p=p->next;}//4,删除p->nextfree(p->next);p->next=NULL;//防止野指针L->len--;
}
/** function: 按位置插入* @param [ in] 头结点 插入的位置 插入的值* @param [out] * @return 成功返回0失败返回-1*/
int insert_pos(linklist L,int pos,datatype e)
{//1,判断头结点是否存在//2.判断位置是否合法if(L==NULL || pos<1 || pos>L->len+1){printf("插入失败\n");return -1;}//3,找到pos-1,起名字plinklist p=L;for(int i=0;i<pos-1;i++){p=p->next;}//4,插入新节点slinklist s=create_node();if(s==NULL)return -1;//s的数据域s->data=e;//s的指针域s->next=p->next;p->next=s;L->len++;
}
/** function: 按位置删除* @param [ in] 头结点 位置* @param [out] * @return 成功返回0失败返回-1*/
int delete_pos(linklist L,int pos)
{//1,判断头结点是否存在//2,判断链表是否为空//3,判断位置是否合法if(L==NULL || L->len==0 || pos<1 || pos>L->len){printf("删除失败\n");return -1;}//4,找到pos-1起名字plinklist p=L;for(int i=0;i<pos-1;i++){p=p->next;}//5,删除p->nextlinklist q=p->next;p->next=q->next;free(q);q=NULL;L->len--;
}
/** function: 按位置查找* @param [ in] 链表 位置* @param [out] * @return 成功返回0失败返回-1*/
int search_pos(linklist L,int pos)
{//1,判断头结点是否存在//2,判断链表是否为空//3,判断位置是否合法if(L==NULL || L->len==0 || pos<1 || pos>L->len){printf("查找失败\n");return -1;}//4,查找pos位置起名字plinklist p=L;for(int i=0;i<pos;i++){p=p->next;}//5,查找:输出printf("查找的值是:%d\n",p->data);return 0;
}
/** function: 按元素查找* @param [ in] 头结点 查找的值* @param [out] * @return 成功返回下表 失败返回-1*/
int search_data(linklist L,datatype key)
{//1,判断头结点是否存在//2,判断链表是否为空if(L==NULL || L->len==0){printf("按元素查找失败\n");return -1;}//3,循环链表比较linklist p=L;int count=0;while(p->next!=NULL){p=p->next;count++;if(p->data==key){return count;}}return -1;
}
/** function: 按元素删除* @param [ in] 头结点 删除的元素* @param [out] * @return 成功返回0失败返回-1*/
int delete_data(linklist L,datatype key)
{//1,查找key对应的位置int pos=search_data(L,key);if(pos==-1){printf("删除元素失败\n");return -1;}//2,根据位置删除delete_pos(L,pos);return 0;
}
/** function: 单链表按位置修改* @param [ in] 头结点 修改的位置 修改的值* @param [out] * @return 成功返回0失败返回-1 */
int update_pos(linklist L,int pos,datatype e)
{if(L==NULL || L->len==0 || pos<1 || pos>L->len){//1.判断链表是否存在//2.判断链表是否为空//3.判断链表是否合法printf("修改失败\n");return -1;}//4,查找pos位置起名字plinklist p=L;for(int i=0;i<pos;i++){p=p->next;}//5.重新赋值p->data=e;return 0;
/** function: 按元素对元素进行修改* @param [ in] 链表 修改的元素 新的元素* @param [out] * @return 成功返回0,失败返回-1*/
int datachange_data(linklist L,datatype num,datatype e)
{//判断元素是否存在//判断链表是否为空//判断头结点是否存在if(L==NULL||L->len==0){printf("修改失败!\n");return -1;}//首先找到要修改的元素的位置int index=search_data(L,num);insert_pos(L,index,e);}
/** function: 链表释放空间* @param [ in] 链表* @param [out]* @return 无返回值*/
void ifree(linklist L)
{if(L==NULL)return;for(int i=0;i<L->len;i++){delete_head(L);}//删除头ifree(L);L=NULL;
}}
#include "head.h"
int main(int argc, const char *argv[])
{linklist L=create_head();
#if 0//循环头插:在头结点就后面插入int n;datatype e;printf("请输入插入的个数:");scanf("%d",&n);for(int i=0;i<n;i++){printf("请输入插入的值:");scanf("%d",&e);insert_head(L,e);}output(L);
#else//尾插:永远在尾部插入int n;datatype e;printf("请输入插入的个数:");scanf("%d",&n);for(int i=0;i<n;i++){printf("请输入插入的值:");scanf("%d",&e);insert_rear(L,e);}output(L);
#endif
#if 0//头删:delete_head(L);delete_head(L);output(L);
#else//尾删
// delete_rear(L);
// delete_rear(L);output(L);
#endif//按位置插入int pos;printf("请输入插入的位置:");scanf("%d",&pos);printf("请输入插入的值:");scanf("%d",&e);insert_pos(L,pos,e);output(L);//按位置删除printf("请输入删除的位置:");scanf("%d",&pos);delete_pos(L,pos);output(L);//按位置查找printf("请输入查找的位置:");scanf("%d",&pos);search_pos(L,pos);//按元素查找datatype key;printf("请输入查找的值:");scanf("%d",&key);int flag=search_data(L,key);if(flag==-1)printf("查找的元素不存在\n");elseprintf("在%d位置出现\n",flag);//按元素删除printf("请输入删除的元素:");scanf("%d",&key);delete_data(L,key);output(L);//按位置修改printf("请输入查找的位置:");scanf("%d",&pos);printf("请输入插入要修改的值:");scanf("%d",&e);output(L);//按元素修改datatype num;printf("请输入要修改的元素:");scanf("%d",&num);printf("请输入新的元素:");scanf("%d",&e);datachange_data(L,num,e);output(L);puts("");//空间释放ifree(L);return 0;
}
20230330华清远见作业相关推荐
- 20230322华清远见作业
作业1:定义有参函数实现,主调函数中输入两个数据,通过函数调用,交换该两个变量的值,主调函数输出交换后的结果 #include<stdio.h> #include<stdlib.h& ...
- 20230317华清远见作业
作业1:输出从起始值到终止值之间,所有能被3或5整除的所有数,起始值和终止值由用户输入 #include<stdio.h> #include<string.h> #includ ...
- 20230319华清远见作业
作业1:输出从起始值到终止值之间,所有能被3或5整除的所有数,起始值和终止值由用户输入 #include<string.h> #include<stdio.h> #includ ...
- 20230327华清远见作业
1.在堆区申请2个字符类型的大小为20字节的空间. 1> 定义函数,实现在堆区申请空间 2> 定义函数,输入两个字符串 3> 定义函数,计算两个字符串的长度[非函数] sizeof_ ...
- 20230329华清远见作业
#include "head.h"int main(int argc, const char *argv[]) {seqlist *list =create();//循环在尾部插入 ...
- 20230403华清远见作业
1.进制转换 #ifndef __HEAD_H_ #define __HEAD_H_#include <stdio.h> #include <string.h> #includ ...
- 20230223华清远见作业
仿照str系列函数,完成自定义的mystrlen .mystrcmp.mystrcpy,mystrcat. mystrlen #include<stdio.h> #include<s ...
- 20230331华清远见作业
#include "head.h" int main(int argc, const char *argv[]) {doublelink l =create_head();int ...
- 阶段总结:华清远见毕业总结
在毕业之际,苦于自身水平不足,不够完善的技能不足以在就业形势严峻的今天找到一份适合的工作,由于我是一个电子信息工程专业出身的学生,在学校里通过专业选修等课程接触到了单片机和嵌入式等课程,从而产生了一点 ...
最新文章
- java JDK 11.0.5的安装
- 物联网 — 5G 边缘计算与 IoT
- mysql 5.6.11 error 1059_mysql5.6.15问题如何解决
- nacos作注册中心+feign接口调用进行服务提供和服务消费代码示例
- 详解struts2中struts.properties
- ECMAScript 2019(ES10)新特性简介
- js符号输入不可用_JS 控制非法字符的输入代码
- 天津知青网6周年网庆-京剧-智取威虎山片段
- [转]Java5泛型的用法,T.class的获取和为擦拭法站台
- c++date数据类型_PLC编程设涉及到的数据类型了解一下
- file对象怎么才会有值_怎么去聊天女生才会跟你约会
- linux下rocksdb的编译安装
- 浅谈MySQL索引背后的数据结构及算法
- T4 生成指定DB表实体
- PLSQL的下载、安装、配置远程连接Oracle 详解
- 判断用户首次登录的两种方式
- 互联网的起源发展历史
- JavaScript-- 基础知识面试题
- php 商户转账到微信零钱
- 数字IC手撕代码-兆易创新笔试真题