ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

960: 双向链表的操作问题

2021-04-24 10:01:07  阅读:161  来源: 互联网

标签:DLinkNode 结点 960 int next 链表 双向 data


题目描述
建立一个长度为n的带头结点的双向链表,使得该链表中的数据元素递增有序排列。(必须使用双向链表完成,数据类型为整型。)

输入
第一行:双向表的长度;
第二行:链表中的数据元素。

输出
输出双向链表中的数据元素的值。

样例输入
10
2 4 6 3 5 8 10 21 12 9

样例输出
2 3 4 5 6 8 9 10 12 21

#include<stdio.h>
#include<malloc.h>
#define MaxSize 1000
typedef struct DNode
{
	int data;
	struct DNode *prior;
	struct DNode *next;
}DLinkNode;
void Create(DLinkNode*&L,int a[],int n)//尾插法
{
	DLinkNode*r,*s;
	L=(DLinkNode*)malloc(sizeof(DLinkNode));
	r=L;
	for(int i=0;i<n;i++)
	{
		s=(DLinkNode*)malloc(sizeof(DLinkNode));
		s->data=a[i];
		r->next=s;s->prior=r;
		r=s;
	}
	r->next=NULL;
}
void Sort(DLinkNode*&L)//其实就是选择排序
{
    DLinkNode *p=L->next;//p为当前访问结点
    DLinkNode *q;//q为p的后一个结点
    DLinkNode *flag;//找到最小值,记录地址为flag
    int MIN;//存每次查找到的最小值
    while(p!=NULL)//从头开始
    {
        bool sign=false;//默认没找到
        MIN=p->data;//假设当前结点数最小
        q=p->next;//从p的后一结点开始
        while(q!=NULL)
        {
            if(q->data<MIN)//找到最小数,更新
            {
                flag=q;//记录最小数的地址
                sign=true;//标记找到了
                MIN=q->data;//更新最小数
            }
            q=q->next;//往后继续,看是否有更小数
        }
        if(sign)//如果找到,仅交换数即可,无需交换位置
        {
            flag->data=p->data;//flag结点的数变为p结点的数
            p->data=MIN;//p结点的数变为最小数
            //这样最小的数就排在前面了
        }
        p=p->next;//p结点后移一位,接着查找
    }
}
void display(DLinkNode*L)
{
    DLinkNode *p=L->next;
    while(p!=NULL)
    {
        printf("%d ",p->data);
        p=p->next;
    }
}
int main()
{
	int n,a[MaxSize];
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	DLinkNode*L;
	Create(L,a,n);//尾插法建表,书55页
	Sort(L);//排序
    display(L);//打表
}

标签:DLinkNode,结点,960,int,next,链表,双向,data
来源: https://blog.csdn.net/chen10151015/article/details/116082011

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有