#include "pch.h"
#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int ElemType;
typedef int Status;
/*存储结构*/
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
/*头插法建表*/
void CreateListF(LinkList *L,ElemType a[],int n)
{
LinkList s;
int i;
*L = (LinkList)malloc(sizeof(LNode));
(*L)->next = NULL;
for (int i = 0; i < n;i++) {
s = (LinkList)malloc(sizeof(LNode));
s->data = a[i];
s->next = (*L)->next; //将s插入开始节点之前,头结点之后
(*L)->next = s;
}
}
/*尾插法建表*/
void CreateListR(LinkList *L,ElemType a[],int n)
{
LinkList s, r;
int i;
(*L) = (LinkList)malloc(sizeof(LNode));//创建头结点
r = (*L); //r开始时指向头节点
for (i = 0; i < n;i++) { //循环建立数据节点
s = (LinkList)malloc(sizeof(LNode)); //创建数据节点s
s->data = a[i]; //将s插入r之后
r->next = s;
r = s;
}
r->next = NULL; //为节点next域置为NULL
}
void visit(ElemType e)
{
printf("%d",e);
}
void TraverseList(LinkList L,void (*visit)(ElemType))
{
LinkList p = L->next;
while (p) {
visit(p->data);
p = p->next;
}
}
int main()
{
LinkList L,R;
ElemType a[] = {1,2,3,4,5};
CreateListF(&L,a,5);
CreateListR(&R,a,5);
TraverseList(L, visit);
printf("\n");
TraverseList(R,visit);
}
线性表单链表头插法、尾插法(C语言)
最新推荐文章于 2023-11-15 12:35:14 发布