数据结构-链表

1.head.h

cpp 复制代码
#ifndef __HEAD_H_
#define __HEAD_H_
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef int type;
enum A{SUCCESS,FLASE=-1};
typedef struct Node
{
	union
	{
		type data;
		type len;
	};
	struct Node *next;
}*Llist;
Llist create(type flag);
int insert_head(Llist head,type element);
int output(Llist head);
int insert_rear(Llist head,type element);
int delete_head(Llist head);
int delete_rear(Llist head);
int delete_sub(Llist head,type sub);
int update_sub(Llist head,type sub,type element);
int insert_sub(Llist head,type sub,type element);
int search_sub(Llist head,type sub);
int search_element(Llist head,type element);
int update_element(Llist head,type element,type element0);
int delete_element(Llist head,type element);
int reverse(Llist head);
#endif

2.test.c

cpp 复制代码
#include "head.h"
Llist create(type flag)
{
	Llist list=(Llist)malloc(sizeof(struct Node));
	if(flag==1)
	{
	list->len=0;
	}
	else if(flag==0)
	{
	list->data=0;
	}
	list->next=NULL;
	return list;
}

int insert_head(Llist head,type element)
{
	if(head==NULL)
	{
		return FLASE;
	}
	Llist p=create(0);
	p->data=element;
	p->next=head->next;
	head->next=p;
	head->len++;
	return SUCCESS;
}

int output(Llist head)
{
	if(head==NULL)
	{
		return FLASE;
	}
	Llist p=head->next;
	printf("链表输出为:");
	while(p!=NULL)
	{
		printf("%d ",p->data);
		p=p->next;
	}
	printf("\n");
return SUCCESS;
}

int insert_rear(Llist head,type element)
{
	if(head==NULL)
		return FLASE;
	Llist p=head;
	while(p->next!=NULL)
		p=p->next;
	Llist s=create(0);
	s->data=element;
	p->next=s;
	head->len++;
	return FLASE;
}

int delete_head(Llist head)
{
	if(head==NULL)
		return FLASE;
	if(head->next==NULL)
		return FLASE;
	Llist p=head->next;
	head->next=p->next;
	free(p);
	p=NULL;
	head->len--;
	return SUCCESS;
}

int delete_rear(Llist head)
{
	if(head==NULL)
		return FLASE;
	if(head->next==NULL)
		return FLASE;
	Llist p=head;
	while(p->next->next!=NULL)
		p=p->next;
	Llist s=p->next;
	p->next=NULL;
	free(s);
	s=NULL;
	head->len--;
	return FLASE;
}

int insert_sub(Llist head,type sub,type element)
{
	if(head==NULL)
		return FLASE;
	Llist p=head;
	if(sub<=0||sub>head->len)
		return FLASE;
	if(sub==1)
	{
	insert_head(head,element);
	}
	else{
	for(type i=0;i<sub-1;i++)
	{
	p=p->next;
	}
	Llist s=create(0);
	s->data=element;
	s->next=p->next;
	p->next=s;
	head->len++;
	}
return SUCCESS;
}

int delete_sub(Llist head,type sub)
{
	if(head==NULL)
		return FLASE;
	Llist p=head;
	if(sub<=0||sub>head->len)
		return FLASE;
	if(sub==head->len)
	{
		delete_rear(head);
	}
	else
	{
		for(type i=0;i<sub-1;i++)
		{
			p=p->next;
		}
		Llist del=p->next;
		p->next=del->next;
		free(del);
		del=NULL;
	}
	head->len--;
	return SUCCESS;
}

int update_sub(Llist head,type sub,type element)
{
	if(head==NULL)
		return FLASE;
	Llist p=head;
	if(sub<=0||sub>head->len)
		return FLASE;
	for(type i=0;i<sub;i++)
	{
		p=p->next;
	}
	p->data=element;
	return SUCCESS;
}

int search_sub(Llist head,type sub)
{
	if(head==NULL)
		return FLASE;
	Llist p=head;
	if(sub<=0||sub>head->len)
		return FLASE;
	for(type i=0;i<sub;i++)
	{
		p=p->next;
	}
	printf("在第%d位的值是:%d\n",sub,p->data);
return SUCCESS;
}

int search_element(Llist head,type element)
{
	if(head==NULL)
		return FLASE;
	Llist p=head;
	type count=0;
	for(type i=0;i<head->len;i++)
	{
		p=p->next;
		count++;
		if(p->data==element)
		{
			printf("数据%d在第%d位\n",element,count);
		}
	}
	return SUCCESS;
}

int update_element(Llist head,type element,type element0)
{
	if(head==NULL)
		return FLASE;
	Llist p=head;
	for(type i=0;i<head->len;i++)
	{
		p=p->next;
		if(p->data==element)
		{
			p->data=element0;
		}
	}
return SUCCESS;
}

int delete_element(Llist head,type element)
{
	if(head==NULL)
		return FLASE;
	Llist p=head;
	for(type i=0;i<head->len;i++)
	{
		if(p->next->data==element)
		{
		Llist s=p->next;
		p->next=s->next;
		free(s);
		s=NULL;
		head->len--;
		}
		else
		{
		p=p->next;
		}
	}
return SUCCESS;
}

int reverse(Llist head)
{
	if(head==NULL||head->next==NULL)
		return FLASE;
	Llist p=head->next;
	head->next=NULL;
	for(type i=0;i<head->len;i++)
	{
		Llist s=p;
		p=p->next;
		s->next=head->next;
		head->next=s;
	}
	 p=head->next;
	printf("链表逆置为:");
	while(p!=NULL)
	{
		printf("%d ",p->data);
		p=p->next;
	}
	printf("\n");
return SUCCESS;
}

3.main.c

cpp 复制代码
#include "head.h"
int main(int argc,const char *argv[])
{
	Llist head=create(1);
	type n,element,sub,element0;
	printf("输入头插次数:");
	scanf("%d",&n);
	for(type i=0;i<n;i++)
	{
		printf("请输入第%d个数据:",i+1);
		scanf("%d",&element);
		insert_head(head,element);
	}
	output(head);
	printf("输入尾插次数:");
	scanf("%d",&n);
	for(type i=0;i<n;i++)
	{
		printf("请输入第%d个数据:",i+1);
		scanf("%d",&element);
		insert_rear(head,element);
	}
	output(head);
	printf("输入头删次数:");
	scanf("%d",&n);
	for(type i=0;i<n;i++)
	{
		delete_head(head);
	}
	output(head);
	printf("输入尾删次数:");
	scanf("%d",&n);
	for(type i=0;i<n;i++)
	{
		delete_rear(head);
	}
	output(head);
	printf("请输入插入的位置和数据:");
	scanf("%d %d",&sub,&element);
	insert_sub(head,sub,element);
	output(head);
	printf("请输入删除的位置:");
	scanf("%d",&sub);
	delete_sub(head,sub);
	output(head);
	printf("请输入修改的位置和元素:");
	scanf("%d %d",&sub,&element);
	update_sub(head,sub,element);
	output(head);
	printf("请输入查找的位置:");
	scanf("%d",&sub);
	search_sub(head,sub);
	printf("请输入要查找的元素:");
	scanf("%d",&element);
	search_element(head,element);
	printf("请输入要修改的元素和修改后的元素:");
	scanf("%d %d",&element,&element0);
	update_element(head,element,element0);
	output(head);
	printf("请输入要删除的元素:");
	scanf("%d",&element);
	delete_element(head,element);
	output(head);
	reverse(head);
return 0;
}
相关推荐
代码中介商13 分钟前
哈希表:从O(1)查找到冲突解决全解析
数据结构·散列表
努力努力再努力wz26 分钟前
【Qt入门系列】:QLabel控件详解:从文本显示到图片展示,再到内容布局与伙伴机制
android·开发语言·数据结构·数据库·c++·qt·mysql
散峰而望42 分钟前
【算法练习】算法练习精选:从 Phone numbers 到 Decrease,覆盖字符串、模拟、图论思维题
数据结构·c++·算法·贪心算法·github·动态规划·图论
并不喜欢吃鱼1 小时前
从零开始 C++----- 十二【C++ 数据结构】map/set 全解析:从使用到红黑树底层模拟实现
开发语言·数据结构·c++
Lsk_Smion1 小时前
力扣实训 _ [33].搜索旋转排序数组 _ [92].翻转链表Ⅱ
java·数据结构·算法
Zhang~Ling1 小时前
二叉搜索树(BST)详解:插入、删除、查找与 Key/Value 实战场景
数据结构·c++·算法
8Qi81 小时前
LeetCode 76. 最小覆盖子串(Minimum Window Substring)
数据结构·算法·leetcode·滑动窗口·哈希表
丘山望岳2 小时前
二叉搜索双壁——map和set
开发语言·数据结构·c++
QiLinkOS2 小时前
合肥气链科技有限公司创办与未来技术应用
c语言·数据结构·c++·人工智能·单片机·嵌入式硬件·算法
Solis程序员2 小时前
TreeMap 核心原理与实战
java·数据结构·算法