数据结构--单链

#include "link.h"

plink get_head()

{

plink p=malloc(sizeof(Link));

if(p==NULL)

{

printf("申情节点失败\n");

return NULL;

}

p->len=0;

p->next=NULL;

return p;

}

void head_insert(plink L,int a)

{

if(L==NULL)

{

printf("单链表不存在\n");

}

plink p=malloc(sizeof(Link));//申请新节点

p->data=a;//新节点赋值

p->next=L->next;//将第一个节点的地址放入新节点指针域

L->next=p;//将新节点地址放入头结点指针域

L->len++;

}

void node_output(plink L)

{

if(L==NULL||L->len==0)

{

printf("单链表不存在或者为空\n");

}

plink t=L;

for(int i=0;i<L->len;i++)

{

t=t->next;

printf("%d\t",t->data);

}

putchar(10);

}

void tail_insert(plink L,int a)

{

if(L==NULL)

{

printf("单链表不存在\n");

}

plink t=L;

for(int i=0;i<L->len;i++)

{

t=t->next;

}

plink p=malloc(sizeof(Link));//申请新节点

p->data=a;//新节点赋值

t->next=p;

p->next=NULL;

L->len++;

}

void any_insert(plink L)

{

if(NULL==L)

{

printf("插入失败\n");

}

int key,x;

printf("请输入要插入的位置:");

scanf("%d",&key);

plink t=L;

for(int i=0;i<key-1;i++)

{

t=t->next;

}

printf("请输入要插入的值:");

scanf("%d",&x);

plink p=malloc(sizeof(Link));//申请新节点

p->data=x;//新节点赋值

p->next=t->next;

t->next=p;

L->len++;

}

void head_dele(plink L)

{

if(NULL==L)

{

printf("单链表不存在或者为空\n");

}

plink t=L->next;

L->next=t->next;

L->len--;

free(t);

t=NULL;

}

void tail_dele(plink L)

{

if(NULL==L||L->len==0)

{

printf("单链表不存在或者为空\n");

}

plink t=L;

for(int i=0;i<L->len-1;i++)

{

t=t->next;

}

plink q=t->next;

t->next=NULL;

L->len--;

free(q);

q=NULL;

}

void any_dele(plink L)

{

if(L==NULL||L->len==0)

{

printf("单链表不存在或者为空\n");

}

int key;

printf("请输入要删除的位置:");

scanf("%d",&key);

plink t=L;

for(int i=0;i<key-1;i++)

{

t=t->next;

}

plink p=t->next;//申请新节点

t->next=t->next->next;

L->len--;

free(p);

p=NULL;

}

void find_change(plink L)

{

int key,sub=-1,x;

printf("请输入要查找的数:");

scanf("%d",&key);

printf("请输入要修改的值:");

scanf("%d",&x);

if(L==NULL||L->len==0)

{

printf("单链表不存在或为空\n");

}

plink t=L;

for(int i=0;i<L->len;i++)

{

t=t->next;

if(t->data==key)

{

sub=i;

t->data=x;

}

}

if(sub==-1)

{

printf("不存在该节点\n");

}

}

void node_reverse(plink L)

{

if(L==NULL||L->len==0)

{

printf("单链表不存在或为空\n");

}

plink q=L->next->next;

plink t=L->next;

while(q!=NULL)

{

t->next=q->next;

q->next=L->next;

L->next=q;

q=t->next;

}

}

void node_sort(plink L)//升序

{

if(L==NULL||L->len==0)

{

printf("单链表不存在或为空\n");

}

for(int i=0;i<L->len-1;i++)

{

plink q=L->next->next;

plink t=L->next;

while(q!=NULL)

{

if(q->data<t->data)

{

t->next=q->next;

q->next=L->next;

L->next=q;

q=t->next;

}

else

{

t=t->next;

q=q->next;

}

}

}

}

void node_cut(plink L)

{

if(L==NULL||L->len==0)

{

printf("单链表不存在或为空\n");

}

plink t=L->next;

plink q=L->next->next;

while(q!=NULL)

{

L->next=q;

free(t);

t=q;

q=t->next;

L->len--;

}

free(t);

t=NULL;

L->len--;

}

#ifndef _LINK_H

#define _LINK_H

#include<myhead.h>

typedef struct node//节点结构体

{

union

{

int len;//链表长度

int data;//节点数据域,存储数据

};//节省空间

struct node *next;//指向下一个指针节点

}Link,*plink;//结构体普通类型

plink get_head();

void head_insert(plink,int);

void node_output(plink);

void tail_insert(plink,int);

void any_insert(plink);

void head_dele(plink);

void tail_dele(plink);

void any_dele(plink);

void find_change(plink);

void node_reverse(plink);

void node_sort(plink);

void node_cut(plink);

#endif

#include "link.h"

int main(int argc, const char *argv[])

{

//申请头结点函数,返回头结点地址给L

plink L=get_head();

//头插法 创建整个表

int a[10]={10,20,30,40,50,60,70,80,90,95};

for(int i=0;i<10;i++)

{

head_insert(L,a[i]);

}

//尾插法创建整个表

for(int i=0;i<10;i++)

{

tail_insert(L,a[i]);

}

//单链表遍历

node_output(L);

putchar(10);

any_insert(L);

node_output(L);

putchar(10);

head_dele(L);

node_output(L);

putchar(10);

tail_dele(L);

node_output(L);

any_dele(L);

node_output(L);

putchar(10);

find_change(L);

node_output(L);

putchar(10);

node_reverse(L);

node_output(L);

putchar(10);

node_sort(L);

node_output(L);

putchar(10);

node_cut(L);

node_output(L);

return 0;

}

相关推荐
来自天蝎座的孙孙13 分钟前
洛谷P1595讲解(加强版)+错排讲解
python·算法
GawynKing32 分钟前
图论(5)最小生成树算法
算法·图论·最小生成树
试剂界的爱马仕37 分钟前
胶质母细胞瘤对化疗的敏感性由磷脂酰肌醇3-激酶β选择性调控
人工智能·科技·算法·机器学习·ai写作
promising-w41 分钟前
【嵌入式C语言】六
c语言·开发语言
打不了嗝 ᥬ᭄1 小时前
Linux 信号
linux·开发语言·c++·算法
ankleless1 小时前
C语言(11)—— 数组(超绝详细总结)
c语言·零基础·数组·二维数组·自学·一维数组
张子夜 iiii1 小时前
机器学习算法系列专栏:主成分分析(PCA)降维算法(初学者)
人工智能·python·算法·机器学习
一匹电信狗1 小时前
【C++】异常详解(万字解读)
服务器·c++·算法·leetcode·小程序·stl·visual studio
sp422 小时前
白话 LRU 缓存及链表的数据结构讲解(二)
算法
PineappleCoder2 小时前
为什么说发布 - 订阅是代码的 “万能胶水”?解耦逻辑全解析
前端·javascript·算法