链表的插入删除合并

typedef int elemtype; 定义elemtype为int类型

//链表有数据域和指针域

struct lnode{
	elemtype data;
	lnode* next;//指向相同类型的指针 
};
typedef lnode* linklist;  给结构体更名

//链表输出 因为创建的链表含有头结点,所以新设了一个变量p,使p=L->next;如果没有头结点的话,完全可以不设p

void show(linklist L){
	linklist p;
	p=L->next; 
	while(p){
		cout<data<<" ";
		p=p->next;
	}
	cout<

//链表的初始化
/给链表分配空间 ,即就是创建头结点,给头结点分配空间
新创建的结点,其next指针都不能悬空
输入的时候分 头插和尾插,头插法:每一次在头结点的后面插入数据 即s->next=l->next; l->next=s;两句的顺序千万不能颠倒
尾插法:需要记录链表的尾端 即tail->next=s;tail=s; 把s挂接在尾端
在创建链表的时候若L->NULL是没有头结点的,若L->next=NULL代表是有头结点的
/

void created_L(linklist& L,int n){
	linklist s,tail;
	L=(lnode*)malloc(sizeof(lnode));//创建了头结点 
	L->next=NULL; 
	tail=L;
	for(int i=0;inext=NULL;
		cin>>s->data;
		tail->next=s;
		tail=s; 
	}
//	show(L); 
}

//链表的插入 不像顺序表一样记录位置 ,linklist后面的&可以不用加
//找到第i个元素 因为链表中没有length,所以要时刻预防链表为空的时候即 l->=NULL的时候


void insertlist(linklist L,int i,elemtype e){
	int j=1;
	linklist s,p;
	p=L;
	while(p&&jnext;
		j=j+1; 
	} 
	if(j==i){
		s=(lnode*)malloc(sizeof(lnode));
		s->next=NULL; 
		s->data=e;
		s->next=p->next;
		p->next=s;
	}
	show(L);	
} 

//链表的删除

void deletelist(linklist& L,int i,elemtype& e){
	linklist pl,p;
	int j=1;
	p=L;
	while(p&&jnext;
		j=j+1; 
	} 
	if(j==i){
		pl=p->next;
		p->next=pl->next;
		e=pl->data;
		free(pl);//删除完释放节点 
	}
	show(L);
} 

//找到指定元素


void getelem(linklist L,elemtype e){
	linklist p;
	p=L->next;
	while(p){
		if(p->data==e)
		cout<data<<" ";
		p=p->next; //不要想的那么复杂,用不到else 
	}	
} 

/*两个链表的合并
la lb升序,合成升序的lc ,la lb比较小的接在lc的尾端,
la lb逆序,合成降序的lc,la lb比较小的插在lc头结点的后面(头插法可以实现逆序)
1.先创建一个新表
*/

void  mergelist(linklist& la,linklist& lb,linklist& lc){
	linklist pa,pb,pctail;
	lc=la;
	pa=la->next;
	lc->next=NULL;	
	pb=lb->next;
	pctail=lc;
	free(lb); 
	while(pa&&pb){
		if(pa->data<=pb->data){
				pctail->next=pa;
		        pctail=pa;
		        pa=pa->next;
		}
		else{
				pctail->next=pb;
		        pctail=pb;
		        pb=pb->next;
		}
	}
		while(pa){
	        	pctail->next=pa;
		        pctail=pa;
		        pa=pa->next;
	}
	while(pb){
		      pctail->next=pb;
		        pctail=pb;
		        pb=pb->next;
	}	

	show(lc);
} 

在main函数中调用

int main(){
	int e=0;
	linklist p,q,m;
	created_L(p,5);
	created_L(q,5);
    insertlist(p,3,8);
    cout<

你可能感兴趣的:(数据结构,算法)