C语言实现单链表相关操作

转载 2015年07月07日 07:52:44


//单链表相关操作

#include<stdio.h>

#include<stdlib.h>
typedef int ElemType; 


typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;

/*
//头插法建立链表
LinkList CreatList1(LinkList &la)
{
int x;
la = (LinkList)malloc(sizeof(LNode));
la->next = NULL;
scanf("%d",&x);
while(x!=9999)
{
LNode *s = (LNode*)malloc(sizeof(LNode));
s->data = x;
s->next = la->next;
la->next = s;
scanf("%d",&x);
}
return la;

}
*/

//尾插法建立链表
LinkList CreatList2(LinkList &la)
{
int x;
la = (LinkList)malloc(sizeof(LNode));
la->next = NULL;
LNode *s,*r=la;
scanf("%d",&x);
while(x!=9999)
{
s = (LNode *)malloc(sizeof(LNode));
s->data = x;
r->next = s;
r = s;
scanf("%d",&x);
}
r->next = NULL;
return la;
}

//按序号查找节点
LNode *GetElem(LinkList L,int i)
{
int j = 1;
LNode *p = L->next;
if(i<1)
return NULL;
while(p&&j<i)
{
p = p->next;
j++;
}
return p;
}

/*
//按值查找表节点
LNode *LocateElem(LinkList L,ElemType e)
{
LNode *p = L->next;
while(p!=NULL && p->data!=e)
p = p->next;
return p;
}
*/

//插入节点元素
LNode *InsertElem(LinkList L,int x,int i)
{
LNode *p = GetElem(L,i-1);
LNode *s = (LNode*)malloc(sizeof(LNode));
s->data = x;
s->next = p->next;
p->next = s;
return p;
}

/*
//s节点插入到p节点之前
LNode *ExchangeElem(LinkList L,int i)
{
LNode *p = GetElem(L,i);
LNode *s = GetElem(L,i+1);
int temp;
s->next = p->next;
p->next = s;
temp = p->data;
p->data = s->data;
s->data = temp;
return p;
}
*/

//删除节点元素
LNode *DeleteElem(LinkList L,int i)
{
LNode *q;
LNode *p = GetElem(L,i-1);
q = p->next;
p->next = q->next;
free(q);
return p;
}

void main()
{
LinkList la;

LNode *m;


//CreatList1(la);//头插法
CreatList2(la);//尾插法

//m = GetElem(la,2);//按序号查找
//m = LocateElem(la,2);//按值查找
//printf("%d\n",m->data);

//m = InsertElem(la,88,4);//插入节点
//printf("%d\n",m->next->data);

//m = ExchangeElem(la,3);//交换相邻两元素的位置
//printf("%d,%d\n",m->data,m->next->data);

m = DeleteElem(la,4);//删除元素
printf("%d,%d\n",m->data,m->next->data);
}

相关文章推荐

我面试遇到的C语言中单链表相关的操作粗浅实现

主要包括单链表中节点的插入, 删除, 反转链表, 链表排序, 查询链表中第几个或倒数第几个节点的值(即将补充的有链表是否有环, 两个链表是否相交以及第一个公共节点).

单链表顺序存储相关操作的c语言实现

单链表顺序存储相关操作的c语言实现,实现了初始化,创建,查找,删除,定位还有两个链表的合并.

【C语言版数据结构】线性表的单链表有关的相关操作

/*线性表的单链表存储,并且实现顺序建立链表、逆序建立链表、*****/ /*元素的读取、插入、删除、逆置、合并、输出********************/ //---------------...

C语言实现单链表——之基本操作1

一般面试题中会考虑无头节点的单链表下面是一些实现: 声明Sqlist.h文件#pragma once #include #include typedef int Datatype; typede...

单链表的基本操作大全之C语言实现(二)

单链表的基本操作大全之C语言实现(二)补充一些链表的操作,之前的基本操作点击下面的链接。 单链表的基本操作大全之C语言实现(一)1. 递归打印链表void show_linklist(PNODE *...

C语言实现单链表的初始化、创建、遍历等操作

编译环境:VC++6.0 #include#includetypedef struct LNode{int data;struct LNode *next;}LNode,*LinkList;LinkL...

单链表及其基本操作(C语言实现)

单链表是一种基础线性数据结构,其结构分为数据域和指针域两部分,数据域用于存放数据,可以是一个整型,一个数组,一个结构体等等,指针域用于存放一个指针,指向下一个链表节点,每个节点通过指针联系,其物理地址...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)