链表的基本操作实现
任务描述 :前几个的实现是线性表的基本操作 现在实现的是链表基本操作的实现。基本上是建立新结点 结点的长度 删除结点 插入结点 合并结点 显示结点的功能。
#include<iostream>
using namespace std;
typedef int status;
//存储结构的类型定义 返回函数的状态结果代码
typedef int ElemType;
//数据元素/結点的表示 这个是用户自定义的数据类型 用于结点
typedef struct LNode{
	ElemType data;//值域
	struct LNode *next;//这个链表类中的指针域
}*LinkList;//*LinkList用于定义头指针
void CreatList(LinkList &L,int n)
{
	L =(LinkList)malloc(sizeof(LNode));//系统动态生成一个LNode的结点 同时将该结点的起始位置赋给指针变量
	L->next = NULL;//很明显 这是一个头结点
	LinkList p;
	LinkList s;
	s = L;
	for(int i =n;i>0;--i)
	{
		p = (LinkList)malloc(sizeof(LNode));//生成新结点
		cin>>p->data;
		p->next =s->next;
		s->next =  p;
		s = s->next;
	}
}
int listlength(LinkList &L)
{
	LinkList p;
	p=L;
	int j =0;
while(p->next!=NULL)
{
	p = p->next;
	++j;
}
return j;
}
void uniform(LinkList &La,LinkList &Lb,LinkList &Lc)
{
	LinkList pa ;
	LinkList pb ;
	LinkList pc ;
	Lc =(LinkList)malloc(sizeof(LNode));
	pa = La->next;//将头结点指向的下一个结点的指针给pa
	pb = Lb->next;
	pc = La;//这里比较关键 由于刚开始Lc链表没有值 那么首先它的指针指向是La
	Lc = pc;//这时的指针也是指向Lc的
	while(pa&&pb)
	{
	
		if(pa->data<=pb->data)
		{
		
		
			pc->next = pa;//pa的指针指向pc的下一个结点
			pc = pa;
			pa = pa->next;
		}
		else
		{
			pc->next = pb;
			pc = pb;
			pb = pb->next;
		
		}
	
	}
	pc->next =pa?pa:pb;
}
void ListDelete(LinkList &L,int i)
{
	LinkList p;
	p=L;//头结点的指针给p
	int j =0;
	while(p&&j<i-1)
	{
		p = p->next;
		++j;
	}
	p->next = p->next->next;
}
void ListInsert(LinkList &L,int i,ElemType e)
{//在带头结点的单链表L中第i个位置之前插入元素e
	LinkList p;
	LinkList s;
	p=L;
	int j = 0;
	while(p&&j<i-1)
	{
		p=p->next;
		++j;
	
	}//此时的p已经定好要插入的位置了
		s = (LinkList)malloc(sizeof(LNode));
		s->data =e;
		s->next = p->next;
		p->next =s;
}
void display(LinkList &L)
{
	LinkList p;
	p= L;
	int j = 0;
	while(j<listlength(L))
	{
	
		p = p->next;
		cout<<p->data<<"  ";
	}
}
void  main()
{
	LinkList La;
	LinkList Lb;
	LinkList Lc;
	
	cout<<"来吧 输入数据吧!"<<endl;
	CreatList(La,4);
	
	cout<<"不够爽 在来一波"<<endl;
	CreatList(Lb,7);
	
	uniform(La,Lb,Lc);
	
    cout <<endl;
	display(Lc);
}
 
  
 
                    
                 
                
            
         
         
 浙公网安备 33010602011771号
浙公网安备 33010602011771号