//尾删 (作业)
int list_delete_tail(LinkList L);
//按值进行修改函数(作业)
int list_update_value(LinkList L, datatype old_e, datatype new_e);
//链表翻转
void list_reverse(LinkList L);
//链表合并
void list_merge(LinkList L, LinkList H);
#ifndef __1_H__
#define __1_H__
typedef char datatype;
typedef struct Node
{
union
{
datatype data;
int len;
};
struct Node *Next;
}Node,*list_link;
list_link list_create();
//判空
int list_empty(list_link p);
//头插
int list_link_head(list_link p,datatype g);
//输出
void list_out(list_link p);
//查找任意位置节点
list_link list_search_pos(list_link p,int pos);
//申请新节点封装函数
list_link list_new_link(datatype g);
//尾插
void list_link_insert(list_link p,datatype g);
//任选位置插入
void list_link_insert_pos(list_link p,int pos,datatype g);
//头删
void list_head_delete(list_link p);
//尾删
void list_dowm_delete(list_link p);
//任意位置删除
void list_delete_pos(list_link p,int pos);
//头改
void list_update_head(list_link p,datatype g);
//尾改
void list_update_down(list_link p,datatype g);
//按位置改
void list_update_pos(list_link p,datatype g,int pos);
//按值查找
list_link list_search_value(list_link p,datatype g);
//按值删除
void list_delete_value(list_link p,datatype g);
//按值修改
void list_update_value(list_link p,datatype g,datatype g1);
//翻转
void list_reverse(list_link p);
//链表合并
void list_merge(list_link p,list_link L);
//销毁
void list_free(list_link p);
#endif
*****************************************************************************************
#include <stdio.h>
#include<stdlib.h>
#include"1.h"
list_link list_create()
{
list_link p=(list_link)malloc(sizeof(Node));
if(p==NULL)
{
printf("申请失败\n");
return NULL;
}
p->len=0;
p->Next=NULL;
printf("创建成功\n");
return p;
}
//判空
int list_empty(list_link p)
{
return p->Next==NULL ?1:0;
}
//头插
int list_link_head(list_link p,datatype g)
{
if(NULL==p)
{
printf("所给链表不合法\n");
return -1;
}
list_link p1=(list_link)malloc(sizeof(Node));
if(p1==NULL)
{
printf("申请失败\n");
return -2;
}
p1->data=g;
p1->Next=NULL;
p1->Next=p->Next;
p->Next=p1;
p->len++;
printf("输入成功\n");
return 0;
}
//输出
void list_out(list_link p)
{
if(p==NULL||list_empty(p))
{
printf("失败\n");
return;
}
list_link p1=p->Next;
printf("输出链表:");
while(p1!=NULL)
{
printf("%c ",p1->data);
p1=p1->Next;
}
putchar(10);
}
list_link list_search_pos(list_link p,int pos)
{
if(p==NULL||list_empty(p)||pos>p->len)
{
printf("查找失败\n");
return NULL;
}
list_link G=p;
for(int i=0;i<pos;i++)
{
G=G->Next;
}
return G;
}
list_link list_new_link(datatype g)
{
list_link p=(list_link)malloc(sizeof(Node));
if(p==NULL)
{
printf("申请失败\n");
}
p->Next=NULL;
p->data=g;
return p;
}
void list_link_insert(list_link p,datatype g)
{
if(p==NULL)
{
printf("链表不合法\n");
return ;
}
list_link G=list_search_pos(p,p->len);
list_link p1=list_new_link(g);
p1->Next=G->Next;
G->Next=p1;
p->len++;
printf("插入成功\n");
}
void list_link_insert_pos(list_link p,int pos,datatype g)
{
if(p==NULL||pos<=1||pos>p->len+1)
{
printf("插入失败\n");
return;
}
list_link G=list_search_pos(p,pos-1);
list_link p1=list_new_link(g);
p1->Next=G->Next;
G->Next=p1;
p->len++;
printf("插入成功\n");
}
void list_head_delete(list_link p)
{
if(p==NULL||list_empty(p))
{
printf("无法删除\n");
return;
}
list_link G=p->Next;
p->Next=G->Next;
free(G);
G=NULL;
p->len--;
printf("删除成功\n");
return;
}
void list_dowm_delete (list_link p)
{
if(p==NULL||list_empty(p))
{
printf("无法删除\n");
return;
}
list_link p1=list_search_pos(p,p->len-1);
list_link G=p1->Next;
p1->Next=G->Next;
free(G);
G=NULL;
p->len--;
printf("删出成功\n");
}
void list_delete_pos(list_link p,int pos)
{
if(p==NULL||pos<=1||pos>p->len)
{
printf("输入错误\n");
return;
}
list_link p1=list_search_pos(p,pos-1);
list_link G=p1->Next;
p1->Next=G->Next;
free(G);
G=NULL;
p->len--;
printf("删除成功\n");
return;
}
void list_update_head(list_link p,datatype g)
{
if(p==NULL||list_empty(p))
{
printf("无法修改\n");
return;
}
p->Next->data=g;
printf("修改成功\n");
return;
}
void list_update_down(list_link p,datatype g)
{
if(p==NULL||list_empty(p))
{
printf("无法修改\n");
return;
}
list_link p1=list_search_pos(p,p->len-1);
p1->Next->data=g;
printf("修改成功\n");
return;
}
void list_update_pos(list_link p,datatype g,int pos)
{
if(p==NULL||pos<1||pos>p->len)
{
printf("无法修改\n");
return;
}
list_link p1=list_search_pos(p,pos-1);
p1->Next->data=g;
printf("修改成功\n");
return;
}
list_link list_search_value(list_link p,datatype g)
{
if(p==NULL||list_empty(p))
{
printf("查找失败\n");
return 0;
}
list_link p1=p->Next;
while(p1!=NULL)
{
if(p1->data==g)
{
printf("存在\n");
return p1;
}
p1=p1->Next;
}
printf("不存在\n");
}
void list_delete_value(list_link p,datatype g)
{
list_link G=list_search_value(p,g);
list_link p1=p;
while(p1->Next!=G)
{
p1=p1->Next;
}
p1->Next=G->Next;
printf("删除成功\n");
p->len--;
free(G);
G=NULL;
}
void list_update_value(list_link p,datatype g,datatype g1)
{
list_link G=list_search_value(p,g);
G->data=g1;
printf("修改成功\n");
return;
}
void list_reverse(list_link p)
{
if(p==NULL||list_empty(p))
{
printf("翻转失败\n");
return;
}
datatype temp;
list_link p1;
list_link p2;
for(int i=1;i<=(p->len)/2;i++)
{
p1=list_search_pos(p,i);
p2=list_search_pos(p,(p->len)-i+1);
temp=p1->data;
p1->data=p2->data;
p2->data=temp;
}
printf("翻转成功\n");
return;
}
void list_merge(list_link p,list_link L)
{
if(p==NULL||L==NULL)
{
printf("链表不合法\n");
return;
}
else if(list_empty(p)&&list_empty(L))
{
printf("两个空链表无法合并\n");
return;
}
else if(list_empty(p)&& !list_empty(L))
{
list_out(L);
return;
}
else if(!list_empty(p)&&list_empty(L))
{
list_out(p);
return;
}
else
{
int k=p->len;
list_link p1=list_search_pos(p,p->len);
p1->Next=L;
p->len+=L->len;
list_delete_pos(p,k+1);
p->len--;
}
}
void list_free(list_link p)
{
if(p==NULL)
{
printf("失败\n");
}
while(list_empty==0)
{
list_head_delete(p);
}
free(p);
p=NULL;
printf("释放成功\n");
}
*****************************************************************************************
#include <stdio.h>
#include"1.h"
#include<stdlib.h>
int main(int argc, const char *argv[])
{
list_link p=list_create();
if(p==NULL)
{
return -1;
}
list_link_head(p,'Q');
list_link_head(p,'W');
list_link_head(p,'E');
list_link_head(p,'R');
list_out(p);
//测试查找任意节点位置 printf("%c\n",list_search_pos(p,3)->data);
list_link_insert(p,'D');
list_out(p);
list_link_insert_pos(p,3,'F');
list_out(p);
//printf("%d\n",p->len);
list_head_delete(p);
list_out(p);
list_dowm_delete(p);
list_out(p);
list_delete_pos(p,2);
list_out(p);
list_update_head(p,'B');
list_out(p);
list_update_down(p,'S');
list_out(p);
list_update_pos(p,'H',2);
list_out(p);
list_search_value(p,'S');
list_link_head(p,'Q');
list_link_head(p,'W');
list_out(p);
list_delete_value(p,'Q');
list_out(p);
list_update_value(p,'S','P');
list_out(p);
list_reverse(p);
list_out(p);
//创建第二个链表
list_link L=list_create();
if(L==NULL)
{
return -1;
}
list_link_head(L,'Q');
list_link_head(L,'W');
list_link_head(L,'E');
list_link_head(L,'R');
list_out(L);
//合并两个链表
list_merge(p,L);
list_out(p);
list_free(p);
//释放
free(p);
free(L);
L=NULL;
p=NULL;
return 0;
}