单链表的操作

本文介绍了一种基于单链表的数据结构实现方法,包括如何使用尾插法创建链表、链表的基本操作如遍历、插入和删除元素等,并详细讲解了两个递增有序链表合并为一个递减有序链表的过程。

单链表的操作

① 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。

② 实现该线性表的遍历。

③ 在该单链表的第i个元素前插入一个整数。

④ 删除该单链表中的第i个元素,其值通过参数将其返回。

⑤ 建立两个按值递增有序的单链表,将他们合并成一个按值递减有序的单链表。要求利用原来的存储空间

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 5
typedef struct LNode{
	int data;
	struct LNode *next;
}LNode,*LinkList;


void CreateList(LinkList &L,int n){  //创建链表
    LinkList pre,p;   
    L=(LinkList)malloc(sizeof(LinkList)); //头节点
    pre=L;        
    for(int i=0;i<MAX;i++){  
        p=(LinkList)malloc(sizeof(LinkList));  
        scanf("%d",&(p->data)); 
        pre->next=p; 
        pre=p;    
    }     
    pre->next = NULL;
}

void Output(LinkList &L){
	LinkList p;
	p=L->next;
	while(p){
		printf("%d  ",p->data);
		p=p->next;
	}
}

void AddElem(LinkList &L,int i,int e){//增加元素
	LinkList p,Newp;
	p=L;
	int j=0;
	while(p&&j<i-1){
		p=p->next;
		++j;
	}
	if(!p || j>i-1)
		exit(0);
	Newp=(LinkList)malloc(sizeof(LinkList));
	Newp->data=e;
	Newp->next=p->next;
	p->next=Newp;
}

int DelateElem(LinkList &L,int i,int e){//删除元素
	LinkList p,q;
	p=L;int j=0;
	while(p->next&&j<i-1){
		p=p->next;++j;
	}
	if(!(p->next) || j>i-1)
		exit(0);
	q=p->next;p->next=q->next;e=q->data;free(q);
	return e;
}


void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc) //合并  
{   
    LinkList pa,pb,pc;   
    pa=La->next;pb=Lb->next;   
    Lc=pc=La;   
    while(pa && pb){   
		if(pa->data<=pb->data){   
			pc->next=pa;pc=pa;pa=pa->next;   
		}   
		else{   
			pc->next=pb;pc=pb;pb=pb->next;   
		}   
	}   
	pc->next=pa?pa:pb;   
	free(Lb); 
}   

int main(void){
	LinkList Linka,Linkb,Linkc;
	int e;
	printf("输入两组递增的整数\n");
	CreateList(Linka);
Output(Linka);//输出新建的链表
	AddElem(Linka,1,2);
Output(Linka);//输出添加元素后的链表
	DelateElem(Linka,2,e);
Output(Linka);
	CreateList(Linkb);
	MergeList(Linka,Linkb,Linkc);
	Output(Linkc);
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

终极之旅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值