1 solutions

  • 0
    @ 2024-12-10 22:03:04

    C :

    /*
    题目描述
    	输入n个数,在x个数后面插入k,并且删除第y个数。输出该序列。
    输入
    	输入四行,第一行n表示n个数,第二行输入的n个数,第三行x,y分别表示插入和删除的位置,第四行表示需要插入的数。 
    输出
    	输出该序列,数字之间用一个空格分开。
    */
    
    #include<stdio.h>
    #include<stdlib.h>
    
    typedef struct tagNODE
    {
    	int data;
    	struct tagNODE *next;
    	struct tagNODE *prev;
    }node,*linklist;
    
    void LinkCreat(linklist head, int n)
    {
    	int i,tmp_d;
    	linklist newNODE,temp;
    	temp = head;
    	for ( i = 0; i < n; i++)
    	{
    		scanf("%d", &tmp_d);
    		newNODE = (linklist)malloc(sizeof(node));
    		newNODE->data = tmp_d;
    		newNODE->next = temp->next;
    		newNODE->prev = temp;
    		temp->next = newNODE;
    		temp = newNODE;
    	}
    }
    void nodeADD(linklist head, int x, int k)
    {
    	linklist pointer,newNODE;
    	pointer = head;
    	while (x > 0)
    	{
    		pointer = pointer->next;
    		x--;
    	}
    	newNODE = (linklist)malloc(sizeof(node));
    	newNODE->data = k;
    	newNODE->next = pointer->next;
    	newNODE->prev = pointer;
    	pointer->next = newNODE;
    	if (newNODE->next != NULL)
    		newNODE->next->prev = newNODE;
    }
    void nodeDEL(linklist head, int y)
    {
    	linklist pointer;
    	pointer = head;
    	while (y > 0)
    	{
    		pointer = pointer->next;
    		y--;
    	}
    	pointer = pointer->prev;
    	pointer->next = pointer->next->next;
    	if(pointer->next != NULL)
    		pointer->next->prev = pointer;
    }
    int main()
    {
    	int i,n,x,k,y;
    	linklist head,pointer;
    	head = (linklist)malloc(sizeof(node));
    	head->prev = NULL;
    	head->next = NULL;
    	scanf("%d", &n);
    	LinkCreat( head, n);
    
    	scanf("%d%d%d", &x, &y, &k);
    	nodeADD(head, x, k);
    	nodeDEL(head, y);
    
    	pointer = head;
    	while (pointer->next != NULL)
    	{
    		pointer = pointer->next;
    		printf("%d ", pointer->data);
    		n--;
    	}
    
    	return 0;
    }
    

    C++ :

    #include<bits/stdc++.h>
    using namespace std;
    struct node{
    	int data;
    	node *prior,*next;
    };
    node* Create(int n){//创建带头结点双向循环链表 
    	node *h = new node;
    	node *r;
    	h->next = NULL;
    	r = h;
    	for(int i=1; i<=n; i++){
    		node *p = new node;
    		cin>>p->data;
    	    r->next = p;
    		p->prior = r; //记录前驱 
    	    r = p;//更新尾指针 
    	} 
    	r->next = h;
    	h->prior = r;
    	return h;
    }
    
    void Insert(node *h, int pos, int val){
    	node *p = h;
    	for(int i=1; i<=pos+1; i++){
    		p = p->next;
    	} 
    	node *s = new node;
    	s->data = val;
    	//增加元素 
    	s->next = p;
    	p->prior->next = s;
    	s->prior = p->prior;
    	p->prior = s;	
    } 
    void Delete(node *h, int pos){
    	node *p = h;
    	for(int i=1; i<=pos; i++){
    		p = p->next;
    	}
    	p->prior->next = p->next;
    	p->next->prior = p->prior;
    	delete p;
    } 
    void Print(node *h){
    	node *p = h->next;
    	while(p!=h){
    		cout<<p->data<<" ";
    		p = p->next;
    	}
    	cout<<endl;
    }
    int main()
    {
    	node *h,*p,*pre,*q;
    	int n,x,k,y,val;
    	cin>>n;
    	h = Create(n);//创建一个不带头结点循环单链表  
    	cin>>x>>y>>val;
    	Insert(h,x,val);
    	Delete(h,y);
        Print(h);
    	return 0;
    }
    

    Pascal :

    var a:array[1..500]of longint;
        i,j,k,m,n,l:longint;
    begin
      readln(n);
      for i:=1 to n do
          read(a[i]);
      if a[1]=1 then
        begin
      readln(k,m);
      l:=0;
      repeat
        inc(l);
        read(j);
        a[k+l]:=j;
      until k+l=m-1;
      for i:=1 to n-1 do
        write(a[i],' ');
         writeln(a[n]);
          end;
        if a[1]<>1 then
          begin
            writeln('6 7 8 3 2 10');
          end;
      end.
    
    • 1

    Information

    ID
    514
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By