链表
function.h 头文件
typedef struct LNode {
	
	struct LNode *next;
	int data;
}LNode,*LinkList;//*LinkList等价于typedef int* p;p为指向int类型的指针
typedef int Status;
//初始化链表
Status InitLinkList(LinkList List, int n);
//输出链表中的所有元素
Status OutputLinkList(LinkList List);
//获取某个下标的元素
Status GetElem_L(LinkList L,int i,int *e);
//在链表中插入元素
Status ListInsert_L(LinkList L, int i, int e);
//删除某个元素
Status ListDelete_L(LinkList L,int i,int *e);
//合并两个链表并非递减排序
Status MerageList_L(LinkList L1,LinkList L2,LinkList L3);
//realize.c文件内容
#include "function.h"
#include "stdio.h"
#include "stdlib.h"
#define  OK 1
#define ERROR 0;
//初始化链表
Status InitLinkList(LinkList List, int n) {
List->next = NULL;
LNode *p;
	for (int i = 0; i < n; i++)
	{
		p = (LNode *)malloc(sizeof(LNode));
	     scanf("%d",&p->data);
		
		p->next =List->next;
		
		//在头结点后面插入元素
		List->next = p;
	}	
}
//获取链表的第i个元素
Status GetElem_L(LinkList L, int i, int *e) {
 
	LinkList p;
	p = L->next; int j = 1;
	while (p&&j<i)
	{
		p = p->next;
		j++;
	}
	if (!p || j > i) return ERROR;
	
	*e = p->data;
return OK;
}
Status ListInsert_L(LinkList L, int i, int e) {
LinkList p,node;
	p = L; int j = 0;
	while (p&&j<i-1)
	{
		p = p->next;
		j++;
	}
	if (!p || j > i) return ERROR;
    
	node = (LinkList)malloc(sizeof(node));
	node->data = e;
	node->next = p->next;
	p->next = node;
	return OK;
    
}
Status ListDelete_L(LinkList L, int i,int *e) {
	LinkList p = L;
	int j = 0;
	while (p->next&&j<i-1)
	{
		p = p->next;
		j++;
	}
	if (!p->next || j > i - 1)return ERROR;
	*e = p->data;
	p->next = p->next->next;
	p->data = p->next->data;
return OK;
}
Status MerageList_L(LinkList L1, LinkList L2, LinkList L3) {
	LinkList pa, pb, pc ;
	L3 = pc = pa;
	while (pa&&pb)
	{
	    if (pa->data <= pb->data) {
			pc->next = pa;
			pc = pa;
			pa = pa->next;
		}
		else
		{
			pc->next = pb;
			pc = pb;
			pa = pb->next;
}
	}
	
	pc->next = pa ? pa : pb;
}
//输出链表中的元素值
Status OutputLinkList(LinkList List) {
   
	LinkList L;
	L = List->next;
	printf("输出元素的值为\n");
	while (L)
	{
		printf("%d\n",L->data);
		L = L->next;
}
}
LinkList.c
#include "stdlib.h"
#include  "stdio.h"
#include "function.h"
#define N 5
void main() {
	LNode L,L1,L2,L3;
	int i=0, e=0;
    
	InitLinkList(&L,N);
	printf("输入要获取第几个元素\n");
	scanf("%d",&i);
	//获取元素
    GetElem_L(&L,i, &e);
printf("获取的元素的值%d\n",e);
	printf("请输入要插入元素的位置\n");
   
	scanf("%d",&i);
	printf("请输入插入元素的值\n");
	
	scanf("%d",&e);
	//在第i个位置插入元素
	ListInsert_L(&L, i, e);//时间复杂度为O(n)
	OutputLinkList(&L);
	//删除第i个元素
	printf("请输入要删除的元素\n");
	scanf("%d",&i);
	ListDelete_L(&L, i, &e);//时间复杂度为O(n)
	
	printf("删除元素的值为%d\n",e);
MerageList_L(&L1, &L2, &L3);
    OutputLinkList(&L);
	
}
 
                     
                    
                 
                    
                 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号