链表
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);
}