【数据结构】创建并操作循环链表

问题描述

输入n个整数,创建一个双向循还链表表进行存储,这些整数从第二个结点至表尾递增有序(设a1<x<an-1) (链表中第i个元素其值为ai )。试编写程序,将第一个结点删除并插入表中适当位置,使整个链表递增有序

输入形式

先输入数据的个数,再输入数据

样例输入

5 3 1 2 4 5

样例输出

1 2 3 4 5

样例说明

输入数据的第一个数是整数的个数,其后是数据

代码

#include <iostream>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

#define ElemType int

typedef struct listNode {
	ElemType data;
	struct listNode* llink, * rlink;
}List, * DoubleList;

/*初始化双向链表*/
void InitList(DoubleList* L) {
	*L = (listNode*)malloc(sizeof(listNode));
	(*L)->rlink = NULL;
	(*L)->llink = NULL;
}


void Creatlist(DoubleList L, int n) {
	listNode* r, * s;
	ElemType c;
	r = L;
	while (n--) {
		cin >> c;
		s = (listNode*)malloc(sizeof(listNode));
		s->data = c;
		r->rlink = s;
		s->llink = r;
		r = s;
	}
	r->rlink = L;
	L->llink = r;
}

void Insert(DoubleList L, ElemType e) {
	listNode* s, * p;
	for (p = L->rlink; p != L && p->data < e; p = p->rlink)
		;
	s = (listNode*)malloc(sizeof(listNode));
	s->data = e;
	s->llink = p->llink;
	p->llink->rlink = s;
	p->llink = s;
	s->rlink = p;
	return;
}

void Delete(DoubleList L, int i, ElemType* e) {
	listNode* p;
	int k = 0;
	p = L;
	while (p->rlink != L && k < i) {
		p = p->rlink;
		k++;
	}
	
	*e = p->data;
	p->llink->rlink = p->rlink;
	p->rlink->llink = p->llink;
	free(p);
	return;
}

void show(DoubleList L) {
	listNode* s;
	s = L->rlink;
	while (s != L) {
		cout << s->data << " ";
		s = s->rlink;
	}
	cout << endl;
}


int main()
{
	DoubleList L;
	int len;
	InitList(&L);
	cin >> len;
	Creatlist(L, len);

	/*删除操作*/
	ElemType tmp2;
	Delete(L, 1, &tmp2);

	/*插入操作*/
	Insert(L, tmp2);
	show(L);

	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值