栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

linux c语言实现链表

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

linux c语言实现链表

 

#include 
#include 
#include "linklist.h"

int main(int argc, char *argv[])
{ 
    	int i,pos;
    	data_t data,new_data;
   
    	LinkList *head,*link;
	
	link=head;//调用link,不改变head的值
   	while(1)
   	{
        printf("nnttt欢迎使用链表nn");
        printf("------------------------n");
        printf("tt1.创建链表 n");
        printf("tt2.插入元素(头插法) n");
        printf("tt3.按位置插入元素 n");
        printf("tt4.删除元素(按序号) n");
        printf("tt5.删除元素(按值) n");
        printf("tt6.查询元素(按序号) n");
        printf("tt7.查询元素(按值) n");
        printf("tt8.更改元素(按值) n");
        printf("tt9.显示表中元素n");
        printf("tt10.置空表 n");
        printf("tt11.删除链表 n");
        printf("tt12.链表逆序 n");
        printf("tt0.退出 n");

        printf("请输入[0~10]n");
        scanf("%d",&i);

        switch(i)
        {
            case 1:
            {
            	head=Create_Linklist();
            	link=head;
            	break;
            }
            
            case 2:
            {
            	printf("请输入要插入的值:n");
            	scanf("%d",&data);
            	Linklist_Insert_Head(link,data);
            	break;
            }
            
            case 3:
            {	
            	printf("请输入要插入的位置与要插入的值(以空格隔开)n");
            	scanf("%d %d",&pos,&data);
            	Linklist_Insert_Pos(link,pos,data);
            	break;
            }
            
            case 4:
            {
            	printf("请输入要删除的位置n");
            	scanf("%d",&pos);	
            	Linklist_Delete_Pos(link,pos);
            	break;
            }
            
            case 5:
            {
            	printf("请输入要删除的值n");
            	scanf("%d",&data);            
            	Linklist_Delete_Data(link,data);
            	break;
            }
            
            case 6:
            {	
            	printf("请输入要查询的位置n");
            	scanf("%d",&pos);	
            	Linklist_Find_Pos(link,pos);
            	break;
            }
            
            case 7:
            {	
            	printf("请输入要查找的值n");
            	scanf("%d",&data);  
            	Linklist_Find_Data(link,data);
            	break;
            }
            
            case 8:
            {	
            	printf("请输入被替换的值与新值(以空格隔开)n");
            	scanf("%d %d",&data,&new_data);
            	Linklist_Change_Data(link,data,new_data);
            	break;
            }
            case 9:Linklist_Show(head);break;
            
            case 10:Linklist_Setnull(link);break;
            
            case 11:Linklist_free(head);break;
            
            case 12:Order_Linklist_2(link);break;
            
            case 0:exit(0);
        }
    }
    return 0;
} 





#ifndef __LINKLIST__
#define __LINKLIST__

typedef int data_t;

typedef struct node
{
	data_t data;//数据域
	struct node *next;//指针域
}LinkList;

//1.创建头结点;
LinkList *Create_Linklist();

//2.判空
int Linklist_Empty(LinkList *link);

//3.计算表长
int Linklist_Length(LinkList *link);

//4.从表头插入节点(头插法/尾插法)
void Linklist_Insert_Head(LinkList *link,data_t data);
void Linklist_Insert_Front(LinkList *link,data_t data);

//5.按位置插入数据
void Linklist_Insert_Pos(LinkList *link,int pos,data_t data);

//6.按位置删除数据
void Linklist_Delete_Pos(LinkList *link,int pos);

//7.按数据删除
void Linklist_Delete_Data(LinkList *link,data_t data);

//8.按位置查找元素
int Linklist_Find_Pos(LinkList *link,int pos);

//9.按数据查找元素
int Linklist_Find_Data(LinkList *link,data_t data);

//10.按值修改元素
void Linklist_Change_Data(LinkList *link,data_t data,data_t new_data);

//11.清空链表
void Linklist_Setnull(LinkList *link);

//12.删除链表
void Linklist_free(LinkList *link);

//13.显示链表
void Linklist_Show(LinkList *link);

//14.链表的逆序
LinkList *Order_Linklist(LinkList *link);

void Order_Linklist_1(LinkList *link);
void Order_Linklist_2(LinkList *link);
#endif






#include 
#include 
#include "linklist.h"



//1.创建头结点;

LinkList *Create_Linklist()
{
	LinkList *head=(LinkList *)malloc(sizeof(LinkList));
	if(NULL==head)
	{
		printf("malloc errorn");
		return NULL;
	}
	head->data=-1;
	head->next=NULL;
	printf("链表创建成功");
	return head;
}

//2.判空

int Linklist_Empty(LinkList *link)
{
	if(link->next==NULL)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}

//3.计算表长

int Linklist_Length(LinkList *link)
{
	int i=0;
	while(link->next!=NULL)
	{
		link=link->next;
		i++;
	}
	return i;
}

//4.从表头插入节点(头插法/尾插法)

void Linklist_Insert_Head(LinkList *link,data_t data)
{
	LinkList *p=(LinkList *)malloc(sizeof(LinkList));
	if(NULL==p)
	{
		printf("malloc errorn");
		return ;
	}	
	p->data=data;
	
	p->next=link->next;
	link->next=p;
	return ;
}

void Linklist_Insert_Front(LinkList *link,data_t data)
{
	
	return ;
}

//5.按位置插入数据

void Linklist_Insert_Pos(LinkList *link,int pos,data_t data)
{
	
	int i=Linklist_Length(link);
	if(pos<0 || pos>i+1)
	{
		printf("pos errorn");
		return ;
	}
	for(i=0;inext;
	}
	
	LinkList *p=(LinkList *)malloc(sizeof(LinkList));
	p->data=data;
	p->next=link->next;
	link->next=p;
	
	
	return ;
}

//6.按位置删除数据

void Linklist_Delete_Pos(LinkList *link,int pos)
{
	if(Linklist_Empty(link))
	{
		printf("链表为空");
		return ;
	}	
	
	int i=Linklist_Length(link);
	if(pos<0 || pos>i+1)
	{
		printf("pos errorn");
		return ;
	}
	for(i=0;inext;
	}	
	LinkList *p=link->next;

	link->next=p->next;
	free(p);
	p=NULL;
	
	return ;
}

//7.按数据删除

void Linklist_Delete_Data(LinkList *link,data_t data)
{
	if(Linklist_Empty(link))
	{
		printf("链表为空");
		return ;
	}
	int i=Linklist_Find_Data(link,data);
	
	if(i==-1) return ;
	
	Linklist_Delete_Pos(link,i);
	return ;
}

//8.按位置查找元素

int Linklist_Find_Pos(LinkList *link,int pos)
{
	int i=Linklist_Length(link);
	if(pos<0 || pos>i+1)
	{
		printf("pos errorn");
		return -1;
	}
	for(i=0;inext;
	}	
	
	printf("nlink->data[%d]=%dn",pos,link->data);
	return i;
}

//9.按数据查找元素

int Linklist_Find_Data(LinkList *link,data_t data)
{
	int i=-1,j=Linklist_Length(link);
	while(link->data!=data && i++next;
	}
	if(i==j)
	{
		printf("n表中无这个元素n");
		return -1;
	}
	
	printf("n[%d]=%dn",i,data);
	return i;
}

//10.按值修改元素

void Linklist_Change_Data(LinkList *link,data_t data,data_t new_data)
{
	int i=Linklist_Find_Data(link,data),j;
	for(j=0;j<=i;j++)
	{
		link=link->next;
	}
	link->data=new_data;
	return ;
}

//11.清空链表

void Linklist_Setnull(LinkList *link)
{
	
	LinkList *p=link->next;
	while( p->next != NULL )
	{	
		//printf("np->data=%dn",p->data);
		Linklist_Delete_Pos(link,0);
		p=link->next;
	}
	printf("np->data=%dn",p->data);
	Linklist_Delete_Pos(link,0);
	
	
	link->next=NULL;
	printf("链表已清空n");
	return ;
}

//12.删除链表

void Linklist_free(LinkList *link)
{	
	if(link->next!=NULL)
	{
		Linklist_Setnull(link);
	}
	free(link);
	link=NULL;
	return ;
}
//13.显示链表
void Linklist_Show(LinkList *link)
{
	
	while(link->next!=NULL)
	{
		link=link->next;
		printf("%4d",link->data);		
	}		
	puts("");	
}

LinkList *Order_Linklist(LinkList *link)
{
	LinkList *head=(LinkList *)malloc(sizeof(LinkList));
	if(NULL==head)
	{
		printf("malloc errorn");
		return NULL;
	}
	head->data=-1;
	head->next=NULL;
	
	while(link->next!=NULL)
	{
		link=link->next;
		Linklist_Insert_Head(head,link->data);
	}
	
		
	Linklist_Show(head);
	
	return head;	
}
{
	LinkList *head=link->next->next;//指向第二个
	link->next->next=NULL;//第一个作为结尾,指向NULL

	while(head->next!=NULL)
	{
		
		Linklist_Insert_Head(link,head->data);
		head=head->next;
	}
	
	Linklist_Insert_Head(link,head->data);
	
		
	Linklist_Show(link);
	
	return ;	
}

void Order_Linklist_2(LinkList *link)
{
	LinkList *cur,*pre,*next;
	cur=link->next;//cur指向第一个
	next=cur->next;//next指向第二个
	cur->next=NULL;//最后一个指向空
	pre=cur;	//pre指向前一个
	cur=next;	//cur指向当前
	
	while(cur->next!=NULL)
	{
		next=cur->next;//next指向前一个
		cur->next=pre;//链接后一个
		pre=cur;	//pre前移,为下次链接做准备
		cur=next;	//cur指向下一次要更改连接的目标
	}
	cur->next=pre;//最后一个链接上之前的
	link->next=cur;//再把头指针指向更改后的第一个元素
	Linklist_Show(link);
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1030184.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号