當前位置:編程學習大全網 - 編程語言 - 數據結構,編程

數據結構,編程

#include<stdio.h>

#include<iostream.h>

#include<malloc.h>

typedef char ElemType;

typedef struct LinkNode

{

ElemType elem;

struct LinkNode *next; //指針域

}LinkType;

class LinkList

{

LinkType *head;

public:

LinkList ()

{

head=(LinkType *)malloc(sizeof(LinkList));

head->next=NULL;

}

~LinkList()

{

head=head->next;

free(head);

}

void InsertElement(ElemType e,int x) //這是插入函數

{

LinkType *p=head;

while(x>0) {x--;p=p->next;}

p=(LinkType *)malloc(sizeof(LinkType));

p->elem=e;p->next=head->next;head->next=p;

}

void DisElem(int x)

{

LinkType *p=head;

while(x>0) {x--;p=p->next;}

cout<<p->elem<<endl;

}

int ListLength()

{

int x=0;

LinkType *p=head->next;

while(p!=NULL) {x++;p=p->next;}

return x;

}

void SortList()

{

LinkType *p=head,*s;

p=p->next;

ElemType e;

while(p!=NULL)

{

s=p->next;

while(s!=NULL)

{

if(s->elem<p->elem)

{e=p->elem;p->elem=s->elem;s->elem=e;}

s=s->next;

}

p=p->next;

}

}

int FindElem(ElemType x)

{

LinkType *p=head;

p=p->next; int n=0;

while(p!=NULL)

{n++;if(p->elem==x) return n;p=p->next; }

return 0;

}

void DelElem(int x)

{

LinkType *p=head,*s;

while(x>1) {x--;p=p->next;}

s=p->next;

p->next=s->next;

free(s);

}

void SumList(LinkList *L1,LinkList *L2)

{

int n;

LinkList L3;

LinkType *p=L1->head,*q=L2->head;

p=p->next;q=q->next;

while(p!=NULL)

{

q=L2->head->next;

n=0;

while(q!=NULL)

{

if(q->elem!=p->elem) n++;

q=q->next;

}

if(n==L2->ListLength()) L3.InsertElement(p->elem,1);

p=p->next;

}

q=L2->head->next;

while(q!=NULL)

{L3.InsertElement(q->elem,1);q=q->next;}

cout<<"並集:"<<endl;

L3.SortList();

L3.DisplayLink();

}

void AndList(LinkList *L1,LinkList *L2)

{

LinkList L3;

LinkType *p=L1->head,*q=L2->head;

p=p->next;q=q->next;

while(p!=NULL)

{

q=L2->head->next;

while(q!=NULL)

{

if(q->elem==p->elem) L3.InsertElement(p->elem,1);

q=q->next;

}

p=p->next;

}

cout<<"交集:"<<endl;

L3.SortList();

L3.DisplayLink();

}

void DisList(LinkList *L1,LinkList *L2)

{

int n;

LinkList L3;

LinkType *p=L1->head,*q=L2->head;

p=p->next;q=q->next;

while(p!=NULL)

{

q=L2->head->next;

n=0;

while(q!=NULL)

{

if(q->elem!=p->elem) n++;

q=q->next;

}

if(n==L2->ListLength()) L3.InsertElement(p->elem,1);

p=p->next;

}

cout<<"L1 - L2 的差集:"<<endl;

L3.SortList();

L3.DisplayLink();

}

int ListEmpty()

{

LinkType *p;

p=head;

if(p!=NULL) return 1;

else return 0;

}

void DisplayLink()

{

LinkType *p=head->next;

while(p!=NULL)

{cout<<p->elem<<' '; p=p->next;}

cout<<endl;

}

};

void main()

{

LinkList l1,l2,l3;

l1.InsertElement('e',1);

l1.InsertElement('d',1);

l1.InsertElement('c',1);

l1.InsertElement('s',1);

l1.InsertElement('k',1);

l2.InsertElement('a',1);

l2.InsertElement('s',1);

l2.InsertElement('d',1);

l2.InsertElement('x',1);

l2.InsertElement('w',1);

l1.DisplayLink();

l2.DisplayLink();

cout<<"排序後:"<<endl;

l1.SortList();

l2.SortList();

cout<<"L1 : ";

l1.DisplayLink();

cout<<"L2 : ";

l2.DisplayLink();

l3.SumList(&l1,&l2);

l3.AndList(&l1,&l2);

l3.DisList(&l1,&l2);

}

以上是鏈表的基本用法,包括查找,插入,刪除,鏈表的並集和差集

  • 上一篇:關於師範生簡歷自我評價五篇
  • 下一篇:無人機應用技術哪個學校好
  • copyright 2024編程學習大全網