Xoá phần tử thứ N trong Danh sách liên kết con trỏ bằng C

Đây là chương trình xoá phần tử thứ n trong danh sách liên kết, chương trình được viết bằng C, các bạn cùng tham khảo.

#include
#include
#include
#include

typedef struct tagsl {
int key;
struct tagsl *next;
} SL;

SL *first, *last;

void initialize()
{
first = last = NULL;
}

void cleanup()
{
SL *f;

while (first != NULL)
{
f = first;
first = first->next;
free(f);
}
first = last = NULL;
}

void insert(int key)
{
SL *s;

s = (SL *)malloc(sizeof(SL));
s->key = key;
s->next = NULL;
if (first == NULL)
first = last = s;
else
{
last->next = s;
last = last->next;
}
}

void inds()
{
SL *f;
printf(“\nDanh sach : “);
f = first;
while (f != NULL)
{
printf(“%3d”, f->key);
f = f->next;
}
}

int xoa_n(int n)
{
SL *f, *a;
int i = 0;
a = NULL;
f = first;
while (inext;
}
if (f == NULL)
return 0;
else
{
if (a == NULL)
{
first = f->next;
free(f);
}
else if (f->next == NULL)
{
last = a;
last->next = NULL;
free(f);
}
else
{
a->next = f->next;
free(f);
}
return 1;
}
}

void main()
{
int i, n;
initialize();
randomize();
for (i=0; i<20; i++)
insert(random(20));
inds();
do {
printf(“\nXoa phan tu thu (<0 de thoat) : “); scanf(“%d”, &n); if (n>-1)
{
if (xoa_n(n))
inds();
else
printf(“Danh sach co it hon %d phan tu”, n+1);
}
} while (n > -1);
cleanup();
}

Cùng chạy chương trình và xem kết quả thế nào nhé.

Ví dụ về danh sách liên kết, sử dụng con trỏ trong c

Đây là ví dụ về danh sách liên kết sử dụng con trỏ trong c

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <iostream.h>
#include <dos.h>
#define false 0
#define true 1
struct nhansu {char ten[20];int tuoi;nhansu* next;};
int snv;nhansu *phead,*pcurrent;
void khoitao();
void nhap();
void xem();
void sapxep();
void sapxep2();
//=================================
void main()
{const int F1=59,F2=60,F3=61,F4=62,F10=68;
char chon;
while(true)
  {clrscr();
   printf(“\nF1. Khoi tao”);
   printf(“\nF2. Nhap”);
   printf(“\nF3. Xem”);
   printf(“\nF4. Sap xep”);
   printf(“\nF10.Ket thuc”);
   printf(“\n    Nhan phim F1 – F10 de chon”);
   chon=getch();
   if(chon==0) chon=getch();
   if(chon==F10) break;
   switch(chon)
    {case F1: khoitao();break;
     case F2: nhap();break;
     case F3: xem();break;
     case F4: sapxep2();break;
    }
   gotoxy(50,24);
   printf(“Nhan phim bat ky de tiep tuc”);
   getch();
  }
}
//========================================
void khoitao()
{phead=NULL;
  snv=0;pcurrent=NULL;
};
//========================================
void nhap()
{int i,mm;
  nhansu *p1,*p, *tmp;
  p=p1=phead;
  while(p!=NULL)
   {p1=p;
    p=p->next;
   }
  cout<<endl<<“Nhap bao nhieu nguoi?”;cin>>mm;
  for(i=0;i<mm;i++)
   {tmp=new nhansu;tmp->next=NULL;
    cout<<endl<<“Nhap nhan vien thu “<<snv+i+1<<“: “;
    cout<<endl<<“Ten: “;gets(tmp->ten);
    cout<<“Tuoi: “;cin>>tmp->tuoi;
    if(p1==NULL)
     {p1=phead=tmp;}
      else
      {p1->next=tmp;p1=tmp;}

   }
  snv+=mm;
  pcurrent=p1;
}
//========================================
void xem()
{int i;
  cout<<endl<<“Danh sach nhan vien:”;
  cout<<endl<<“Ten      tuoi”;
  nhansu *p=phead;
  while(p!=NULL)
   {cout<<endl<<p->ten<<”        “<<p->tuoi;
    p=p->next;
   }
}
//========================================
void sapxep()
{if(snv<2) return;
  nhansu *p,*p1,*p2,*ptmp,tmp;int mtuoi;
  p=p1=p2=phead;
  //pt truoc p,p1t truoc p1
  while(p1!=NULL)
   {p=p1;
    p2=p1->next;
    while(p2!=NULL)
     {if(p2->tuoi<p->tuoi) p=p2;
      p2=p2->next;
     }
    if(p!=p1)
     {tmp=*p1;ptmp=p1->next;
      *p1=*p;p1->next=ptmp;
      ptmp=p->next;*p=tmp;
      p->next=ptmp;
     }
    p1=p1->next;
   }
}
//========================================
void sapxep2()
{if(snv<2) return;
  nhansu *p,*pt,*p1,*p1t,*p2,*p2t,*ptmp,tmp;int mtuoi;
  p1t=p1=phead;
  //pt truoc p,p1t truoc p1
  while(p1!=NULL)
   {pt=p1t;
    p=p1;
    p2t=p1;
    p2=p1->next;
    while(p2!=NULL)
     {if(p2->tuoi<p->tuoi) {pt=p2t;p=p2;}
      p2t=p2;
      p2=p2->next;
     }
    if(p==p1)
     {p1t=p1;
      p1=p1->next;
      continue;
     }
    if(p1==phead)
     {if(p1->next==p)//p va p1 lien nhau
    {ptmp=p->next;
     phead=p;p->next=p1;p1->next=ptmp;
    }
    else
    {ptmp=p->next;
     phead=p;p->next=p1->next;pt->next=p1;p1->next=ptmp;
    }
     }
     else
     {if(p1->next==p)//p va p1 lien nhau
    {ptmp=p->next;
     p1t->next=p;p->next=p1;p1->next=ptmp;
    }
    else
    {ptmp=p->next;
     p1t->next=p;p->next=p1->next;pt->next=p1;p1->next=ptmp;
    }
     }
    p1=p;
    p1t=p1;
    p1=p1->next;
   }
}

Vui lòng comment nội dung cần hỏi đáp cũng như trao đổi thêm