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

原创 2013年12月02日 18:58:48
#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);
	}
	q = L;
	q->next = L;
	for (i=n; i>0; --i)
	{
		p = (LinkList) malloc (sizeof (LNode));
		if (!p)
		{
			exit(OVERFLOW);
		}
		scanf("%d",&p->data);
		p->next = L;
		q->next = p;
		q = p;
	}
}


void Display(LinkList L)
{
	LinkList p = L->next;
	while (p != L)
	{
		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->next != L  && j<i-1)
	{
		p = p->next;
		++j;
	}
	if ( (p->next == L) || 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 != L && j<i-1)
	{
		p = p->next;
		++j;
	}
	if ((p->next == L) || j>i-1)
	{
		return ERROR;
	}
	q = p->next;
	p->next = q->next ;
	e = q->data ;
	free(q);
	return OK;
}




int main()
{
	int i,e,n;
	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);
	return 0;
}

相关文章推荐

数据结构_线性表_链式存储_双向循环链表的基本操作

//双向链表,将头结点和尾结点链接起来,就构成了双向循环链表 //双向循环链表是将头结点的前驱指针指向了尾结点,同时将尾结点的后劲指针指向了头结点. //空表,头结点的前驱和后继指针均指向了自己,...

小猪的数据结构辅助教程——2.4 线性表中的循环链表

小猪的数据结构辅助教程——2.4 线性表中的循环链表标签(空格分隔): 数据结构本节学习路线图与学习要点学习要点: 1.了解单链表存在怎样的缺点,暴露出来的问题 2.知道什么是循环单链表...

数据结构(4)-线性表(循环链表)

概念:将单链表终端节点的指针由空指针改为指向头结点,就使整个单链表形成一个环,这种首尾相接的单链表称为单循环链表,简称循环链表; 循环链表和单链表的区别:尾结点的指针不指向null,而是指向head...

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

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

【C++数据结构学习笔记---线性表】带头结点的双向循环链表

【C++数据结构学习笔记---线性表】带头结点的双向循环链表 一个简单的实现例子,只用到了插入函数以及输出函数,初始化26个英文字母。 插入算法的思路:(insert)本算法为结点后插入 1...
  • Encal
  • Encal
  • 2013年03月14日 00:26
  • 659

【C++数据结构学习笔记---线性表】带头结点的单循环链表

【C++数据结构学习笔记---线性表】带头结点的单循环链表 一个简单的实现例子,只用到了插入函数以及输出函数,初始化26个英文字母。 插入算法的思路:(insert)本算法为结点后插入 1、...
  • Encal
  • Encal
  • 2013年03月13日 12:06
  • 703

数据结构学习----线性表的链式表示之循环双链表(Java实现)

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

线性表12|循环链表 – 数据结构和算法17

线性表12:循环链表   让编程改变世界 Change the world by program   循环,顾名思义就是:绕。   打个比方,就是从前山上有座庙,庙里有个老和尚和一个...

小猪的数据结构辅助教程——2.7 线性表中的双向循环链表

小猪的数据结构辅助教程——2.7 线性表中的双向循环链表标签(空格分隔): 数据结构本节学习路线图与学习要点学习要点: 1.了解引入双向循环链表的原因 2.熟悉双向循环链表的特点以及存储结构...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据结构 线性表 循环链表 插入与删除
举报原因:
原因补充:

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