資源簡介
實現單鏈表的并集與交集的程序,程序首先由用戶指定輸入兩個任意長短的單鏈表,然后程序將這兩個單鏈表的并集和交集求出來并顯示。程序里面包含了單鏈表的頭插法和尾插法兩種操作。
代碼片段和文件信息
#include?“stdio.h“
#include?“stdlib.h“
#define?maxSize?100
//定義單鏈表
typedef?struct?LNode
{
int?data;
struct?LNode?*next;
}LNode;
void?printList(LNode?*p);
//創建單鏈表
LNode?*?createList(int?n){
LNode?*p*current;
p?=?(LNode*)malloc(sizeof(LNode));
p->next=NULL;
current?=?p;
int?numivalue;
num?=?n;
for(i=0;i LNode?*q;
q?=?(LNode*)malloc(sizeof(LNode));
printf(“請輸入單鏈表第%d個元素的值:“i+1);
scanf(“%d“&value);
q->data=value;
current->next=q;
current=current->next;
q->next=NULL;
}
printf(“\n單鏈表創建完成!\n“);
return?p;
}
//將值插入到單鏈表的尾部(尾插法)
LNode?*?insertListFoot(LNode?*pint?n){
LNode?*s*t;
s?=?(LNode?*)malloc(sizeof(LNode)); //建立一個帶頭結點的單鏈表
s->data?=?n;
s->next?=?NULL;
if(p->next!=NULL){
t=p->next;
}else{
t=p;
}
while(t->next!=NULL){ //循環結束后,t指向單鏈表的末尾結點
t=t->next;
}
t->next?=?s; //尾結點的指針指向插入值的結點
return?p;
}
//將值插入到單鏈表的頭部(頭插法)
LNode?*?insertListHead(LNode?*pint?n){
LNode?*s;
s?=?(LNode?*)malloc(sizeof(LNode)); //建立一個帶頭結點的單鏈表
s->next=NULL;
s->data=n;
s->next=p->next;
p->next=s;
return?p;
}
//查找是否存在某元素
bool?isPresent(LNode?*pint?n){
p?=?p->next;
while(p!=NULL){
if(p->data?==?n){
return?1;
}
p?=?p->next;
}
return?0;
}
//求并集
LNode?*?unionList(LNode?*p?LNode?*q){
LNode?*s*t*currentS*currentP*currentQ;
s?=?(LNode*)malloc(sizeof(LNode)); //建立一個帶頭結點的新鏈表s
s->next=NULL;
t=p->next;
//s1=s;
while(t){ //將單鏈表A中的所有元素插入到新的單鏈表S中
s?=?insertListFoot(st->data);
t=t->next;
}
currentS?=?s;
currentP?=?p->next;
currentQ?=?q->next;
while(currentQ){ //循環遍歷單鏈表B,如果單鏈表B中有元素在單鏈表S中找不到,則插入到單鏈表S中
if(!isPresent(currentSc
- 上一篇:數據結構 用哈希表做的通訊錄
- 下一篇:QUEUE.CPP
評論
共有 條評論