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

原创 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.源程序 list.c #include #include typedef struct node{ int num; char name[128]; struct node *...
  • tankai19880619
  • tankai19880619
  • 2013年10月09日 14:34
  • 3392

数据结构与算法基础(二)之单链表的插入与删除操作

今天主要来讲一讲单链表的插入与删除操作的步骤和算法解释。这是单链表最基本的操作但是也是最重要的基础之一,有些地方还比较容易出错。下面我就结合源代码在上面加上注释来解释每一步的作用。 **一、单链...
  • sinat_21312425
  • sinat_21312425
  • 2016年02月27日 15:49
  • 3645

数据结构 单链表插入删除操作(c语言实现)

#include "stdlib.h" #include "stdio.h" typedef struct LNode{ int data; struct LNode *next; }LNo...
  • catkint
  • catkint
  • 2015年11月29日 16:46
  • 3625

C++ 数据结构的单链表的建立,插入,删除操作

动态内存分配应用举例(链表)  我们知道,数组式计算机根据事先定义好的数组类型与长度自动为其分配一连续的存储单元,相同数组的位置和距离都是固定的,也就是说,任何一个数组元素的地址都可一个简单的公式计...
  • u012746763
  • u012746763
  • 2015年05月27日 10:21
  • 2327

数据结构——单链表的创建、删除、遍历以及节点的插入、删除等操作

1、创建一个结构体:创建一个包含自身结构的结构体,该结构体包含一个数据域和指针域 1、链表初始化:在链表的初始化过程中要为一个结点用malloc函数分配一个空间,并且时next指针指向一个NULL,...
  • banburenshseng
  • banburenshseng
  • 2017年02月08日 16:29
  • 836

数据结构算法代码实现——线性表的链式表示与实现(单链表)(三 )

线性表的链式表示 使用一组任意的存储单元存储线性表的数据元素(这些存储单元可以是连续也可以是不连续的)。 常见的链式表:单链表、静态链表、循环链表、双向链表。 链表的存储方式和特点我们修...
  • hou1620089770
  • hou1620089770
  • 2015年06月02日 08:03
  • 2810

数据结构:程序加图示分析单链表的插入和删除操作

下图展示了单链表的基本结构: head指针是链表的头指针,指向第一个节点,每个节点的next指针域指向下一个节点,最后一个节点的next指针域为NULL,在图中用0表示。 下面先来看程序(...
  • Simba888888
  • Simba888888
  • 2013年04月26日 20:27
  • 3143

线性表之单链表 图解和代码实现

线性表的链接存储结构---单链表 图解:           LinkList.h文件   //LinkList.h 声明类LinkList #ifndef Li...
  • ggxxkkll
  • ggxxkkll
  • 2013年03月11日 21:28
  • 4104

单链表(线性链表)数据元素插入和删除

数据元素的插入:为插入数据元素x,首先要生成一个数据域为x的结点,然后插入在单链表中,根据插入操作的逻辑定义,还需要修改结点a中的指针域,令其指向节点x,而结点x中的指针域应指向结点b,从而实现3个元...
  • qq_34721679
  • qq_34721679
  • 2016年10月23日 00:03
  • 1724

C语言实现线性表的插入和删除操作

设计程序建立一个顺序表,要求从键盘输入整数,并完成添加插入和删除元素功能,并将该顺序表的元素从屏幕显示出来。 使用malloc和realloc函数动态分配内存地址。...
  • lgj123xj
  • lgj123xj
  • 2017年04月25日 17:13
  • 3133
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据结构 线性表 单链表 插入与删除
举报原因:
原因补充:

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