数据结构--单链

#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 a10={10,20,30,40,50,60,70,80,90,95};

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

{

head_insert(L,ai);

}

//尾插法创建整个表

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

{

tail_insert(L,ai);

}

//单链表遍历

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;

}

相关推荐
秋天的怀念_David4 分钟前
第二十一夜 · 数字黑洞与西西弗斯的惩罚
java·程序人生·算法
碧海银沙音频科技研究院1 小时前
在PC电脑上用Whisper→Marian算法实现离线语音翻译功能
算法·whisper
niyongsheng1 小时前
3D 装箱算法工程化:数据结构、放置启发式与支撑规则
数据结构·算法·rust
叉烧滑蛋3 小时前
B站台湾大学郭彦甫|MATLAB 学习笔记|04 变量与档案存取
数据结构
j7~4 小时前
【穷举、深搜与回溯算法】一棵决策树讲透全排列与子集
数据结构·c++·算法·leetcode·回溯·递归
傅科摆 _ py5 小时前
DP,贪心,堆和栈,二分力扣复习
开发语言·python·算法
Shaoshing5 小时前
LeetCode100 42.接雨水
java·算法·leetcode
域限奇点访客5 小时前
用AI生成问卷的网站怎么选?看题目录入结构、题型映射和生成后的校验
算法
Zwawa5 小时前
从 printf 到曲线:把数据送上 VOFA+
c语言·单片机·嵌入式
not coder6 小时前
一文讲通--从树到红黑树
数据结构·算法