9.15作业

//尾删 (作业)
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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值