Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 11 kết quả

Đề tài: Cách chèn một phần tử vào trước phần tử q trong dslk đơn.?

  1. #1
    Ngày gia nhập
    11 2012
    Bài viết
    29

    Cool Cách chèn một phần tử vào trước phần tử q trong dslk đơn.?

    Bạn nào biết thuật toán chèn vào một phần tử vào trước q trong dslk đơn thì chỉ mình với, hoặc nói sơ qua thuật toán để mình viết code cũng được.

  2. #2
    Ngày gia nhập
    11 2010
    Nơi ở
    hell
    Bài viết
    165

    tìm tới node trước node q.lấy node cần chèn trỏ tới node q.xong cập nhật lại node trước node q
    HT117-5277

  3. #3
    Ngày gia nhập
    11 2012
    Bài viết
    29

    Trích dẫn Nguyên bản được gửi bởi treatmaster Xem bài viết
    tìm tới node trước node q.lấy node cần chèn trỏ tới node q.xong cập nhật lại node trước node q
    Mình đang không biết tìm tới node trước node q đây. Bạn nói rõ hơn đi.:|

  4. #4
    Ngày gia nhập
    10 2012
    Bài viết
    1

    Theo mình thì bạn cần dùng thêm một biến đếm, mỗi lần trỏ đến phần tử tiếp theo thì tăng biến đếm lên, khi nào =q là được

  5. #5
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Thuật toán gì nữa @@.
    Bạn tự vẽ cái hình "mô phỏng" 1 đoạn của dslk rồi tự thực hiện việc lắp 1 node mới vào vị trí trước q xem thế nào.
    Thuật toán ở đâu xa? Chính là đó rồi đó
    Um Mani Padme Hum...!!

  6. #6
    Ngày gia nhập
    11 2011
    Bài viết
    152

    Mặc định Cách chèn một phần tử vào trước phần tử q trong dslk đơn.?

    Bạn đang thắc mắc làm sao để thao tác được trên node thứ n phải ko?
    Giả sử bạn có kiểu Node và Header của danh sách như sau
    C Code:
    1. struct Node {
    2.     int info;
    3.     Node *next;
    4. };
    5. typedef struct Node* PNODE;
    6.  
    7. struct Head{
    8.    int nodeNum;
    9.    PNODE first, last;
    10. }

    và bạn đã có 1 dãy các node liên kết với nhau với header của danh sách là "head".
    Nếu muốn cho 1 con trỏ trỏ tới Node thứ n thì làm như sau:
    C Code:
    1. PNODE pNode;
    2. pNode = head.first;
    3. for (int i = 0; i < n; i ++){
    4.    pNode = pNode->next;
    5. }
    Khi con trỏ pNode đã trỏ tới node bạn muốn, bạn có thể thao tác trên node đó.

  7. #7
    Ngày gia nhập
    01 2013
    Nơi ở
    Học viện Kỹ thuật Quân Sự
    Bài viết
    247

    Chèn một nút vào trước nút q trong danh sách liên kết đơn. Thì bạn kiểm tra điều kiện thế này
    Code:
    while (iNode->pNext != q)
             iNode = iNode->pNext;
    Bạn chú ý là iNode là nút dùng để chạy trên danh sách, duyệt danh sách.
    iNode->pNext tức là "Thằng sau tôi là ... "
    Nếu thằng sau tôi là q thì dừng duyệt (ở đây là thoát while đó bạn)

    Bắt đầu chèn vào trước thằng q. (code này tiếp phía sau code bên trên)
    Code:
    struct node* newNode; //Tôi tạo nút mới
    newNode = (struct node*)malloc(sizeof(struct node)); // xin xỏ cấp phát bộ nhớ
    newNode->data = X // Gán dữ liệu cho nút này
    newNode->pNext = q //Cho nó trỏ vào q
    iNode->pNext = newNode // Cho thằng iNode ở trên trỏ vào newNode.
    Nếu cần giúp đỡ, hỗ trợ:
    Bài Tập. Đồ Án. Tools. Phần mềm. Liên hệ:
    Facebook: http://www.facebook.com/thuecodedoan
    Website: https://thuecodedoan.wordpress.com
    Email: thuecodedoan@gmail.com
    Sđt: 094.76.76.854

  8. #8
    Ngày gia nhập
    12 2012
    Nơi ở
    TIN5A - UNETI
    Bài viết
    167

    bạn xem thử

    PHP Code:
               
                   
    //DANH SACH LIEN KET DON
               
    #include<iostream>
    #include<conio.h>
    using namespace std;
    struct list{
        
    int info;
        list *
    next;
    };
    //1.tao nut
    list* createnode(int x){
        list *
    = new list;
        
    p->info x;
        return 
    p;
    }
    //2.chen mot phan tu vao cuoi danh sach
    void insertlast(list* &phead,list *q){
        if(
    phead==NULL){
          
    phead q;
          
    phead->next NULL;
        }
        else 
    insertlast(phead->next,q);
    }
    //3.chen mot phan tu vao dau danh sach
    void insertfirst(list* &phead,list *p){
        
    p->next phead;
        
    phead p;
    }
    //4.nhap cac gia tri cho danh sach lien ket
    void nhap(list* &phead,int n){
        
    int x;
        for(
    int i=0;i<n;i++){
            
    cout<<"\t+ Node "<<i+1<<": ";
            
    cin>>x;
            
    insertlast(phead,createnode(x));
        }
    }
    //5.noi hai dang sach lien ket don
    list* noi(list *phead,list *qhead){
        list *
    aa =new list;
        
    aa NULL;
        while(
    phead!=NULL){
            
    insertlast(aa,createnode(phead->info));
           
    phead phead->next;
        }
        while(
    qhead!=NULL){
            
    insertlast(aa,createnode(qhead->info));
            
    qhead qhead->next;
        }
        return 
    aa;
    }
    //6.xap xep tang dan
    void sort(list* &phead){
        list *
    p,*q;
       
    phead;
        
    int a;
        while(
    p!=NULL){
          
    p->info;
          
    p;
            while(
    q!=NULL){
             if(
    a>q->info){
                   
    q->info;
                   
    q->info q->info;
                   
    q->info;
               }
               
    q->next;
            }
            
    p->info a;
            
    p->next;
        }
    }
    //7.hien ca phan tu trong danh sach ra man hinh
    void show(list *phead){
        while(
    phead!=NULL){
            
    cout<<phead->info<<" ";
            
    phead phead->next;
        }
    }
    //8.xoa phan tu co gia tri x trong danh sach
    void xoa(list* &phead,int x){
        
    int i 0;
        list *
    p,*q;
        
    phead;
        while(
    p!=NULL){
           if(
    p->info==xi++;
            
    p->next;
        }
        if(
    i==0){
           
    cout<<"  + Phan tu " <<x<<" khong co trong dang sach";
          
    cout<<"\n    nen khong xoa no duoc";
        }
       else{
           
    phead;
           if(
    p->info==x){
               
    phead p->next;
               
    delete p;
           }
           else{
               
    phead;
              while(
    p!=NULL&&p->info!=xp->next;
              if(
    p->next==NULL){
                  
    phead;
                  while(
    q->next!=pq->next;
                  
    q->next NULL;
                
    delete p;
              }
              else{
                  
    phead;
                  while(
    q->next!=pq->next;
                  
    q->nextp->next;
                  
    delete p;
              }
           }
       }
    }
    //9.xoa toan bo cac phan tu trong danh sach
    void clear(list* &phead){
        list *
    p;
        while(
    phead!=NULL){
            
    phead;
            
    phead phead->next;
            
    delete p;
        }
    }
    //10.tim phan tu trong danh sach
    void search(list *phead,int x){
        list *
    vitri = new list;
        
    vitri NULL;
        
    int i,j;
        
    0;
        while(
    phead!=NULL){
            
    j++;
            if(
    phead->info==x){
              
    i++;
              
    insertlast(vitri,createnode(j));
            }
            
    phead phead->next;
        }
        
    cout<<"  + Co "<<i<<" phan tu co gia tri "<<x
           
    <<" trong danh sach";
       if(
    i>0){
           
    cout<<"\n  + Vi tri: ";
            
    show(vitri);
       }
    }
    //11.dem so phan tu trong danh sach
    int dem(list *phead){
        
    int i0;
        while(
    phead!=NULL){
            
    i++;
            
    phead phead->next;
        }
        return 
    i;
    }
    //12.chen 1 phan tu co gia tri x vao danh sach
    void insert(list* &phead,int x){
        
    int m,n;
        
    dem(phead);
        
    cout<<"  + Hien danh sach co "<<m<<" phan tu";
        
    cout<<"\n  + Vi tri can chen: ";
      
    nhaplai:
        
    cin>>n;
        if(
    n>m){
           
    cout<<"\n  + Danh sach hien tai chi co "<<m;
          
    cout<<" phantu \n  + Nhap lai: ";
          goto 
    nhaplai;
        }
        list *
    ab phead;
        
    cout<<"  + Them vao truoc hay sau phan tu o vi tri thu "<<n;
        
    cout<<"\n\t-> Them vao truoc an phim 't'.";
        
    cout<<"\n\t-> Them vao sau an phim 's'.";
        
    cout<<"\n\t-> Them vao: ";
        
    char a;
      
    nhap:
       
    cin>>a;
        if(
    a=='t'||a=='s'){
            if(
    a=='t'){
                if(
    n==1insertfirst(phead,createnode(x));
                else{
                    list *
    q,*phead;
                    
    int i0;
                   while(
    i<n-1){
                       
    ab ab->next;
                        
    i++;
                   }
                   while(
    p->next!=abp->next;
                   
    createnode(x);
                   
    p->next q;
                    
    q->next ab;
                }
            }
            else{
                
    int i 0;
                while(
    i<n){
                    
    i++;
                    
    ab ab->next;
                }
                if(
    ab->next==NULLinsertlast(ab,createnode(x));
                else{
                    list *
    p,*q;
                    
    ab->next;
                    
    createnode(x);
                    
    ab->next q;
                    
    q->next p;
                }
            }
        }
        else{
            
    cout<<"\n\t+ Nhap sainhap lai: ";
            goto 
    nhap;
        }
    }            
    //13.ham chinh
    main(){
        list *
    ab = new list;
        
    ab NULL;
        
    cout<<"\n - So phan tu can nhap vao list mot: ";
        
    int x;cin>>x;
        
    nhap(ab,x);
        
    cout<<"  + Danh sach mot xap xep theo chieu tang dan la: \n\t";
        
    //sort(ab);
        
    show(ab);
        list *
    ac = new list;
        
    ac NULL;
        
    cout<<"\n\n - So phan tu can nhap vao list hai: ";
        
    int y;cin>>y;
        
    nhap(ac,y);
        
    cout<<"  + Danh sach hai xap xep theo chieu tang dan la: \n\t";
        
    sort(ac);
        
    show(ac);
        
    cout<<"\n\n - Tron hai danh sach theo chieu tang dan la: \n\t";
        
    ab noi(ab,ac);
        
    sort(ab);
        
    show(ab);
        
    cout<<"\n\n - Trong danh sach co: "<<dem(ab)<<" phan tu";
        
    cout<<"\n\n - Nhap phan tu can tim kiem: ";
        
    int z;
        
    cin>>z;
        
    search(ab,z);
        
    cout<<"\n\n - Nhap phan tu can loai bo: ";
        
    int e;
        
    cin>>e;
        
    xoa(ab,e);
        
    cout<<"\n  + Danh sach sau khi xoa "<<e<<"\n\t";
        
    show(ab);
        
    cout<<"\n\n - Nhap phan tu cam them vao list: ";
        
    int f;
        
    cin>>f;
        
    insert(ab,f);
        
    cout<<"  + Danh sach sau khi them "<<f<<" vao la: \n\t";
        
    show(ab);
        
    cout<<"\n - Xoa sach list:";
        
    clear(ab);
        
    show(ab);
        
    cout<<"\n\n\t\t";


  9. #9
    Ngày gia nhập
    01 2012
    Bài viết
    8

    @ANHMATTROI, xin gop y bai code cua ban the nay,minh sua lai dua tren bai ban. minh chua test cac ham.
    Code:
     				//DANH SACH LIEN KET DON         
    #include<iostream> 
    #include<conio.h> 
    using namespace std; 
    struct Node
    { 
        int info; 
        Node *pNext; 
    }; 
    struct List
    {
    	Node *pHead,*pTail;// 1con tro nam dau va 1 nam cuoi danh sach
    }l;
    // khoi tao List
    void Init(List &l)
    {
    	l.pHead=l.pTail=NULL;
    }
    //1.tao nut 
    Node* getNode(int x)
    { 
        Node *p = new Node; 
        if(p==NULL)
        	return NULL;// khong du bo nho
        p->info = x; 
        p->pNext=NULL;
    	return p; 
    } 
    //2.chen mot phan tu vao cuoi danh sach 
    void addTail(List &l,Node *newNode)
    { 
        if(newNode==NULL)
        	return;
    	if(l.pHead==NULL)
          l.pHead=l.pTail=newNode; 
        else
    	{
        	l.pTail->pNext=newNode;
        	l.pTail=newNode;
        }
    } 
    //3.chen mot phan tu vao dau danh sach 
    void addHead(List &l,Node *newNode)
    { 
        if(newNode==NULL)
        	return;
    	if(l.pHead==NULL)
          l.pHead=l.pTail=newNode; 
        else
    	{
        	newNode->pNext=l.pHead;
        	l.pHead=newNode;
        }
    } 
    //6.xap xep tang dan: thuat toan sap xep doi cho truc tiep
    void Swap(int &a,int &b)
    {
    	int tmp;
    	tmp=a;
    	a=b;
    	b=tmp;
    }
    void InterchangeSort(List &l )
    { 
      for(Node *p=l.pHead;p!=l.pTail;p=p->pNext)
      	  for(Node *q=p->pNext;q!=NULL;q=q->pNext)
      	  	if(p->info>q->info)
      	  		Swap(p->info,q->info);
    } 
    //7.hien ca phan tu trong danh sach ra man hinh 
    void Output(List l)
    { 
        Node *p=l.pHead;
    	while(p!=NULL)
    	{ 
            cout<<p->info<<" "; 
            p = p->pNext; 
        }
        delete(p);
    } 
    //8.xoa 1 node co khoa k
    void RemoveNode(List &l,int k)
    {
        Node* p=l.pHead;
        Node *q=NULL;
        while(p)
        {
        	if(p->info==k)
        		break;
       		q=p;
        	p=p->pNext;//p luon duyet truoc q 1 node
        }
        if(p==NULL)
        	cout<<"k tim thay";
       	if(q==NULL)
    	{
    		//xoa dau danh sach
    		l.pHead=l.pHead->pNext;
    		delete(p);
       	}
       	else
    	{	  
    		//xoa node p sau node q
    		q->pNext=p->pNext;
    		p->pNext=NULL;
    		delete(p); 	
    	}
    } 
    //9.xoa toan bo cac phan tu trong danh sach 
    void RemoveList(List &l)
    { 
        Node *p; 
        while(l.pHead!=NULL)
    	{   
            p=l.pHead;
    		l.pHead=l.pHead->pNext;
    		delete p; 
        }
        l.pTail=NULL;
    } 
    //10.tim phan tu trong danh sach 
    Node* Search(List l,int x)
    { 
        Node *p=l.pHead;
        while(p)
        {
        	if(p->info==x)
        		return p;
       		p=p->pNext;
        }
        return NULL;
    } 
    //11.dem so phan tu trong danh sach 
    int CountNode(List l)
    { 
        int count= 0;
        Node *p=l.pHead;
        while(p)
    	{ 
            count++; 
            p = p->pNext; 
        } 
        return count; 
    } 
    //12.them 1 Node vao sau node p
    void addAfter(List &l,Node* p,Node* newNode)
    { 
        if(p!=NULL)
        	if(p!=l.pTail)
      		{
    		   	newNode->pNext=p->pNext;
        		p->pNext=newNode;
    	    }
    	    else
    	    	addTail(l,newNode);
       	else
       		addHead(l,newNode);
    }             
    //13.ham chinh 
    main()
    { 
        int n,info;
        cout<<"nhap so node:";
        cin>>n;
        for(int i=0;i<n;i++)
        {
        	cout<<"nhap info:";
        	cin>>info;
        	if(getNode(info)==NULL)
        	{
    	    	cout<<"khong du bo nho"<<endl;
    	    	break;
    	    }
    	    addHead(l,getNode(info));
        }
        Output(l);
    }

  10. #10
    Ngày gia nhập
    01 2013
    Bài viết
    8

    //mình viết bằng C, bạn xem thử xem
    Code:
    #include<stdio.h>
    #include<conio.h>
    #include<stdlib.h>
    typedef int element;
    struct node
    {
    	element inf;
    	node *next;
    };
    typedef struct node node;
    node *First;
    
    //ham insert(pred/x). chen gia tri x vao sau pred.
    node *insert(node *pred, element x)
    {
    	node *temp;
    	temp=new node;
    	temp->inf=x;
    	temp->next=pred->next;
    	pred->next=temp;
    	return temp;
    }
    
    //ham delete(x). xoa phan tu dung sau x. va tra ve gia tri phan tu bi xoa.
    element xoa(node *pred)
    {
    	node *temp;
    	temp=new node;
    	element x;
    	temp=pred->next;
    	x=temp->inf;
    	pred->next=pred->next->next;
    	delete(temp);
    	return x;
    }
    
    //insertto_head(f,x) chen gia tri x vao dau danh sach.
    node *insertto_head(node *First, element x)
    {
    	node *temp;
    	temp=new node;
    	temp->inf=x;
    	temp->next=First;
    	First=temp;
    	return First;
    }
    
    //chen gia tri x vao cuoi danh sach.
    node *insertto_last(node *First, element x)
    {
    	node *temp;
    	node *newnode;
    	temp->inf=x;
    	newnode=First;
    	while(newnode->next!=NULL) newnode=newnode->next;
    	newnode->next=temp;
    	return First;
    }
    
    //xoa 1 nut o dau danh sach.
    node *delete_head(node *First)
    {
    	node *temp;	
    	temp=First->next;
    	delete(First);
    	return temp;
    }
    
    //xoa 1 nut o cuoi danh sach duoc tro boi First
    node *delete_last(node *First)
    {
    	node *temp1;
    	node *temp2;
    	temp1=First;temp2=First;
    	while (temp1->next!=NULL)
    	{
    		temp2=temp1;
    		temp1=temp1->next;
    	}
    	temp2->next=NULL;
    	free(temp1);
    	return First;
    }
    
    //kiem tra danh sach rong.
    int empty(node *First)
    {
    	return !First;
    }
    
    //xoa danh sach.
    node *makenull(node *First)
    {
    	while(!empty(First))
    	First=delete_head(First);
    	return First;
    }
    
    //liet ke cac phan tu cua danh sach
    void Print(node *First)
    {
    	node *temp;
    	int cout=0;
    	temp=First;
    	while(!empty(temp))
    	{
    		printf("%d",temp->inf); cout++;
    		temp=temp->next;
    		if(cout%12==0) printf("\n");
    	}
    }
    int main()
    {
    	node *s1,*s2,*s3,*v1,*v2,*v3;
    	element a; 
    	int i,n;
    	s1=NULL;
    	a=-5;
    	s1=insertto_head(s1,a);
    	printf("nhap so luong phan tu n= ");
    	scanf("%d", &n);	
    	v1=s1;
    	for(i=2;i<=n;i++)
    	{
    		a=a+1;
    		v1=insert(v1,a);
    	}
    	printf("danh sach ban dau: \n"); Print(s1); printf("\n");
    	
    	v1=s1;s2=NULL;s3=NULL;
    	while(v1)
    	{
    		if((v1->inf)>0)
    		{
    			if(!s2) 
    			{
    				s2=insertto_head(s2,v1->inf); 
    				v2=s2;
    			}
    			else
    			{
    				insert(v2,v1->inf);
    				v2=v2->next;
    			}
    		}
    		if(v1->inf<0)
    		{
    		if(!s3){s3=insertto_head(s3,v1->inf);v3=s3;
    		}
    		else{insert(v3,v1->inf);v3=v3->next;
    		}
    		}
    		v1=v1->next;
    	}
    	printf("danh sach so duong: \n"); Print(s2); printf("\n");
    	printf("danh sach so am: \n"); Print(s3); printf("\n");
    	getchar(); getchar();
    }

Các đề tài tương tự

  1. Thuật toán C Cách chèn 1 phần tử vào trước một phần tử cho trước trong DSLK kép
    Gửi bởi duythuanIT trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 7
    Bài viết cuối: 31-05-2013, 02:09 PM
  2. Trả lời: 5
    Bài viết cuối: 13-12-2012, 02:54 PM
  3. Code cài đặt DSLK đơn vòng và kép vòng trên C++. Thêm 1 phần tử sau 1 phần tử trong DSLK đơn/kép
    Gửi bởi hoanghieu.fit.hcmus trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 2
    Bài viết cuối: 09-04-2011, 02:54 PM
  4. Thủ tục loại bỏ các phần tử trùng nhau, giữ lại duy nhất 1 phần tử trong DSLK
    Gửi bởi mrtyoffline trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 02-03-2011, 10:27 PM
  5. Chèn phần tử x vào sau phần tử p trong DSLK đơn
    Gửi bởi acumen trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 17-07-2010, 03:37 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn