链表

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);

}

 

posted on 2017-09-19 17:17  paulversion  阅读(191)  评论(0编辑  收藏  举报