数据结构 线性表 单链表 插入与删除

原创 2013年12月02日 18:56:00
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>

#define OK          1
#define ERROR       0
#define OVERFLOW    -2

typedef int ElemType;

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

void CreateList_L(LinkList &L, int n)
{
	int i;
	LinkList p,q;
	L = (LinkList) malloc (sizeof(LNode));
	if (!L)
	{
		exit(OVERFLOW);
	}
	p = L;
	for (i=0; i<n; i++)
	{
		q = (LinkList) malloc (sizeof(LNode));
		if (!q)
		{
			exit(OVERFLOW);
		}
		scanf("%d",&q->data);
		p->next = q;
		p = q;
	}
	p->next = NULL;


}


void Display(LinkList L)
{
	LinkList p = L->next;
	while (p != NULL)
	{
		printf("%d ",p->data);
		p = p->next;
	}
	printf("\n");
}


int ListInsert_L(LinkList &L, int i, ElemType e)
{
	LinkList s,p = L;
	int j = 0;
	while (p && j<i-1)
	{
		p = p->next;
		++j;
	}
	if (!p || j>i-1)
	{
		return ERROR;
	}
	s = (LinkList) malloc (sizeof(LNode));
	s->data = e;
	s->next = p->next;
	p->next = s;
	return OK;
}


int ListDelete_L(LinkList &L, int i, ElemType &e)
{
	LinkList p = L,q;
	int j = 0;
	while (p->next && j<i-1)
	{
		p = p->next;
		++j;
	}
	if (!(p->next) || j>i-1)
	{
		return ERROR;
	}
	q = p->next;
	p->next = q->next ;
	e = q->data ;
	free(q);
	return OK;
}


int GetElem_L(LinkList L, int i, ElemType &e)
{
	LinkList p = L->next;
	int j = 1;
	while (p && j<i)
	{
		p = p->next;
		j++;
	}
	if (!p || j>i)
	{
		return ERROR;
	}
	e = p->data;
	return OK;
}



int main()
{
	int i,n,e;
	LinkList L;
	printf("请输入您要创建单链表的元素的个数:");
	scanf("%d",&n);
	CreateList_L(L,n);
	printf("请输入您要插入元素的位置:");
	scanf("%d",&i);
	printf("请输入您要插入的元素:");
	scanf("%d",&e);
	ListInsert_L(L,i,e);
	printf("插入元素后的单链表是:");
	Display(L);
	printf("请输入您要删除的元素的位置:");
	scanf("%d",&i);
	ListDelete_L(L,i,e);
	printf("该位置上的元素是: %d\n",e);
	printf("删除元素 %d 后的单链表是:",e);
	Display(L);
	printf("请输入您要查找的元素的位置:");
	scanf("%d",&i);
	if (GetElem_L(L,i,e))
	{
		printf("该位置上的元素是:%d\n",e);
	}
	else
	{
		printf("查找失败,位置非法!\n");
	}
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

数据结构线性表(二)之单链表读取、插入、删除

一.链式存储结构个人理解 数据元素不再考虑相邻位置,而是只要哪有空位就到哪,只要让每个元素知道下一位元素的位置就好(用到指针) 二.单链表相关概念推出 1.数据域:ai元素存储自身信息 2.指...

《大话数据结构》第3章 线性表 3.8.2 单链表的删除

3.8.2 单链表的删除         现在我们再来看单链表的删除。设存储元素ai的结点为q,要实现将结点q删除单链表的操作,其实就是将它的前继结点的指针绕过,指向它的后继结点即可(如图3...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

数据结构(2)--线性表单链表的主要操作的实现

 参考书籍:数据结构(C语言版) 严蔚敏 吴伟民编著 清华大学出版社 1.基本定义 #include #include //线性表的两种存储结构: //1.顺序表(动态数组实现、静态数组实...

数据结构学习----线性表的链式表示之升序排序的单链表(Java实现)

线性表接口LList: package com.clarck.datastructure.linked; /** * 线性表接口LList,描述线性表抽象数据类型,泛型参数T表示数据元素的数据类...

Java数据结构(三):线性表之单链表

链式存储结构存储线性表的方法是把存放数据元素的结点用指针域构造成链。指针是指向下一个节点的引用,由数据元素域和一个或若干个指针域组成的一个类称之为结点。链式存储结构的特点是数据元素间的逻辑关系表现在节...

数据结构:线性表之单链表

线性表(亦作顺序表)是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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