zoukankan      html  css  js  c++  java
  • 数据结构:删除数组中的元素(c++)链表形式

    6378:删除数组中的元素(链表)

    描述:

    给定N个整数,将这些整数中与M相等的删除
    假定给出的整数序列为:1,3,3,0,-3,5,6,8,3,10,22,-1,3,5,11,20,100,3,9,3
    应该将其放在一个链表中,链表长度为20
    要删除的数是3,删除以后,链表中只剩14个元素:1 0 -3 5 6 8 10 22 -1 5 11 20 100 9

    输入:

    输入包含3行:
    第一行是一个整数n(1 <= n <= 200000),代表数组中元素的个数。
    第二行包含n个整数,代表数组中的n个元素。每个整数之间用空格分隔;每个整数的取值在32位有符号整数范围以内。
    第三行是一个整数k,代表待删除元素的值(k的取值也在32位有符号整数范围内)。

    输出

    输出只有1行:
    将数组内所有待删除元素删除以后,输出数组内的剩余元素的值,每个整数之间用空格分隔。

    样例输入

    20
    1 3 3 0 -3 5 6 8 3 10 22 -1 3 5 11 20 100 3 9 3
    3
    

    样例输出

    1 0 -3 5 6 8 10 22 -1 5 11 20 100 9
    
    #include<iostream>
    #include<stdlib.h>
    #include<stdio.h>
    using namespace std;
    
    void insertlist(long x,listnode l);
    void deletelist(long n,listnode l);	//这个函数别写,写了之后程序会超时。
    void print(listnode l);
    listnode createlist();
    
    typedef struct node
    {
    	long x;
    	struct node*next;
    }node,*listnode;
    
    int main()
    {
    	listnode l,x;	//写x主要是为了插入的时候循环次数可以减少,直接用x往后插入,这样代码就不会超时
    	l=createlist();
    	x=l;
    	long con,key,v;
    	cin>>con;
    	for(long i=0;i<con;i++)	//一边输入数据,一边插入节点
    	{
    		cin>>v;
    		node*p=new node;
    		p->x=v;
    		p->next=NULL;
    		x->next=p;
    		x=x->next;
    	}
    	cin>>key;
    	deletelist(key,l);	//删除元素相同的节点
    	l=l->next;
    	print(l);	//输出链表中节点元素
    	return 0;
    }
    
    listnode createlist()	//创建单链表
    {
    	listnode l=new nodel
    	l->next=NULL;
    	return l;
    }
    void insertlist(long x,listnode l)	//好可惜啊,写这么多结果用不上,代码没有问题,就是超时
    {
    	node *n=new node;
    	listnode q;
    	q=l;
    	n->x=x;
    	n->next=NULL;
    	while(q->next!=NULL)
    	{
    		q=q->next;
    	}
    	q->next=n;
    }
    
    void deletelist(long n,listnode l)
    {
    	long a=n;
    	listnode t=1;
    	node*q;
    	q=t->next;
    	while(q)
    	{
    		if(q->x==a)
    		{
    			t->next=q->next;
    			free(q);
    			q=t->next;
    		}
    		else
    		{
    			q=q->next;
    			t=t->next;
    		}
    	}
    }
    
    void print(listnode l)
    {
    	while(l)
    	{
    		cout<<l->x<<" ";
    		l=l->next;
    	}
    }
    
    

    记得点个赞再走~拜托啦。

  • 相关阅读:
    c++——if语句
    Hausdorff距离--模板匹配
    牛人(周志华)推荐的人工智能网站
    用VC++实现图像检索技术(转)
    经典的机器学习方面源代码库(非常全,数据挖掘,计算机视觉,模式识别,信息检索相关领域都适用的了)
    2013计算机视觉代码合集四
    2013计算机视觉代码合集三
    2013计算机视觉代码合集二
    2013计算机视觉代码合集一
    [IC]Lithograph(2)光刻技术的分辨率与分辨率增强技术
  • 原文地址:https://www.cnblogs.com/Kuller-Yan/p/12914127.html
Copyright © 2011-2022 走看看