2.c
链表创建成功
判空成功-链表长度为零
此元素头插成功
此元素头插成功
此元素头插成功
此元素头插成功
D E O G 已有数据已经全部遍历
判空成功-链表长度不为零
第4个位置查找成功
G
X D E O G 已有数据已经全部遍历
尾插成功
X D E O G Y 已有数据已经全部遍历
判空成功-链表长度不为零
第0个位置查找成功
任意位置插入成功
M X D E O G Y 已有数据已经全部遍历
判空成功-链表长度不为零
头删除成功
X D E O G Y 已有数据已经全部遍历
判空成功-链表长度不为零
判空成功-链表长度不为零
第2个位置查找成功
X D O G Y 已有数据已经全部遍历
判空成功-链表长度不为零
判空成功-链表长度不为零
第3个位置查找成功
X D O 已有数据已经全部遍历
判空成功-链表长度不为零
按值查找成功
按值查找成功
判空成功-链表长度不为零
判空成功-链表长度不为零
第3个位置查找成功
修改成功
X D B 已有数据已经全部遍历
判空成功-链表长度不为零
按照值修改成功
X Q B 已有数据已经全部遍历
此元素头插成功
此元素头插成功
此元素头插成功
Y E S Y 已有数据已经全部遍历
判空成功-链表长度不为零
第3个位置查找成功
X Q B Y E S Y 已有数据已经全部遍历
2f.c
#include<stdio.h>
#include"2.h"
#include<stdlib.h>
//创建
LinkList list_creat(){
LinkList L=(LinkList)malloc(sizeof(Node));
if(NULL==L){
printf("创建失败\n");
}
L->len=0;
return L;
}
//判空
int list_empty(LinkList L){
if(NULL==L){
printf("判断为空失败\n");
return -1;
}else if(L->len==0){
printf("判空成功-链表长度为零\n");
return 1; //链表为空的时候返回1
}else if(L->len!=0){
printf("判空成功-链表长度不为零\n");
return 0; //链表不为返回0
}
}
//头插
int list_insert_head(LinkList L,datapype e){
if(NULL==L){
printf("此链表不合法\n");
return -1;
}
//数据封装
LinkList p=(LinkList)malloc(sizeof(Node));
if(NULL==p){
printf("结点空间申请失败\n");
return -2;
}
p->data=e; //数据放入结点
p->next=NULL; //新的结点的指针域指向空
//开始进行头插
p->next=L->next;
L->next=p;
//表的变化
L->len++;
printf("此元素头插成功\n");
return 0;
}
//遍历一下链表
void list_show(LinkList L){
if(NULL==L){
printf("此表不合法,无法遍历\n");
return;
}
//辅助指针移动逐个遍历
LinkList p=L->next;
while(p!=NULL){
printf("%c\t",p->data);
p=p->next;
}
printf("已有数据已经全部遍历\n");
}
//按照位置查找返回结点
LinkList list_find_node(LinkList L,int pos){
if(NULL==L||list_empty(L)||pos<0||pos>L->len){
printf("按位置查找失败\n");
return NULL;
}
//定义辅助遍历指针
LinkList q=L; //此处指在车头
for(int i=0;i<pos;i++){
q=q->next;
}
printf("第%d个位置查找成功\n",pos);
return q; //此时指针就指向所要查找的那个位置
}
//申请结点打包元素
LinkList list_make_node(datapype e){
LinkList f=(LinkList)malloc(sizeof(Node));
f->data=e;
f->next=NULL;
return f;
}
//尾插函数
int list_insert_tail(LinkList L,datapype e){
if(NULL==L){
printf("想要尝试的尾插失败\n");
return -1;
}
//循环遍历到最后一个结点进行插入
//定义一个移动指针
LinkList s=L;
while(s->next!=NULL){ //s->next
s=s->next;
}
//跳出循环s指在最后一个结点
//打包要插入的数据
s->next=list_make_node('Y');
L->len++;
printf("尾插成功\n");
return 0;
}
//任意位置插入函数
int list_insert_pos(LinkList L,datapype e,int pos){
if(NULL==L||pos<1||pos>L->len+1){
printf("插入失败\n");
return -1;
}
LinkList s=list_find_node(L,pos-1);
if(NULL==s){
printf("插入失败\n");
return -2;
}
LinkList p=list_make_node('M');
p->next=s->next;
s->next=p;
L->len++;
printf("任意位置插入成功\n");
return 0;
}
//头删除
int list_delete_head(LinkList L){
if(NULL==L||list_empty(L)){
printf("头删除失败\n");
return -1;
}
LinkList s=L->next; //标记要删除的结点
L->next=s->next;
L->len--; //孤立要删除的结点
free(s); //释放该节点
s=NULL;
printf("头删除成功\n");
return 0;
}
//任意位置删除
int list_delete_pos(LinkList L,int pos){
if(NULL==L||list_empty(L)||pos<0||pos>L->len+1){
printf("任意位置删除\n");
return -1;
}
LinkList s=list_find_node(L,pos-1);
LinkList p=s->next;
s->next=p->next;
L->len--;
free(p);
p=NULL;
}
//尾部的删除
int list_delete_tail(LinkList L){
if(NULL==L||list_empty(L)){
printf("尾部删除失败\n");
return -1;
}
LinkList s=list_find_node(L,L->len-1);
LinkList t=s->next;
L->len--;
s->next=NULL;
free(t);
t=NULL;
return 0;
}
//按照值查找返回对应的结点
LinkList list_search_value(LinkList L,datapype e){
if(NULL==L||list_empty(L)){
printf("查找失败\n");
return NULL;
}
LinkList s=L->next;
while(s->data!=e){
s=s->next;
}
printf("按值查找成功\n");
return s;
}
//按照位置修改函数
int list_update_pos(LinkList L,int pos,datapype new_e){
if(NULL==L||list_empty(L)||pos<1||pos>L->len){
printf("按照位置修改失败\n");
return -1;
}
LinkList s=list_find_node(L,pos);
s->data=new_e;
s=NULL;
printf("修改成功\n");
return 0;
}
//按值进行修改函数(作业)
int list_update_value(LinkList L,datapype old_e,datapype new_e){
if(NULL==L||list_empty(L)){
printf("修改失败\n");
return -1;
}
LinkList s=L->next;
while(s->data!=old_e){
s=s->next;
}
s->data=new_e;
printf("按照值修改成功\n");
s=NULL;
return 0;
}
//链表的翻转(作业)
void list_reverse(LinkList L){
}
//链表的合并(作业)
void list_merge(LinkList L,LinkList H){
}