# 数据结构 线性表 建立单链表（头插法）

#include <stdio.h>
#include <stdlib.h>

#define LIST_INIT_SIZE    100
#define LISTLNCREMENT     10
#define OK                1
#define ERROR             0
#define OVERFLOW          -2

typedef int ElemType;

typedef struct
{
ElemType *elem;
int length;
int listsize;
}SqList;

int InitList_Sq(SqList &L)
{
L.elem = (ElemType *) malloc(LIST_INIT_SIZE * sizeof(ElemType));
if (!L.elem)
{
exit(OVERFLOW);
}
L.length = 0;
L.listsize = LIST_INIT_SIZE;
return OK;
}

void Create_Sq(SqList &L, int n)
{
int i;
for (i=0; i<n; i++)
{
scanf("%d",&L.elem[i]);
}
L.length = n;
}

void Display_Sq(SqList L)
{
int i;
for (i=0; i<L.length ; i++)
{
printf("%d ",L.elem[i]);
}
printf("\n");
}

int ListInsert_Sq(SqList &L, int i, ElemType e)
{
ElemType *newbase,*p,*q;
if (i<1 || i>L.length+1)
{
return ERROR;
}
if (L.length >= L.listsize)
{
newbase = (ElemType *)realloc(L.elem ,(L.listsize + LISTLNCREMENT) * sizeof(LISTLNCREMENT));
if (!newbase)
{
exit(OVERFLOW);
}
L.elem = newbase;
L.listsize += LISTLNCREMENT;
}
q = &(L.elem [i-1]);
for (p=&(L.elem[L.length-1]);p>=q;--p)
{
*(p+1) = *p;
}
*q = e;
++L.length ;
return OK;
}

int equal(ElemType i, ElemType j)
{
return (i==j);
}

int LocateElem_Sq(SqList L, ElemType e, int (*compare)(ElemType, ElemType))
{
ElemType *p;
int i = 1;
p = L.elem;
while (i <= L.length  && !(*compare)(*p++,e))
{
++i;
}
if (i<=L.length)
{
return i;
}
else
{
return 0;
}
}

void GetElem(SqList L,int i, ElemType &e)
{
e = L.elem[i-1];
}

void Listunion(SqList &La, SqList Lb)
{
int i,e;
int la_len = La.length ;
int lb_len = Lb.length ;
for (i=1; i<=lb_len; i++)
{
GetElem(Lb,i,e);
if (!LocateElem_Sq(La,e,equal))
{
ListInsert_Sq(La,++la_len, e);
}
}
}

int main()
{
int n;
SqList La,Lb;
InitList_Sq(La);
InitList_Sq(Lb);
printf("请输入链表La的长度: ");
scanf("%d",&n);
printf("请输入 %d 个数据: ",n);
Create_Sq(La,n);
printf("请输入链表Lb的长度: ");
scanf("%d",&n);
printf("请输入 %d 个数据: ",n);
Create_Sq(Lb,n);
printf("合并后的两个链表是:");
Listunion(La,Lb);
Display_Sq(La);

return 0;
}

• 本文已收录于以下专栏：

## 单链表的整表创建--头插法，尾插法

• hacke2
• 2012年02月09日 11:03
• 5914

## 数据结构实战--线性表的单链表实现

• 2015年03月26日 00:05
• 2KB
• 下载

## C++ 数据结构中单链表实现线性表

• 2011年06月01日 15:13
• 10KB
• 下载

## 数据结构【线性表（二）链表】项目一--建立单链表

1. 定义单链表存储结构，用头插法和尾插法建立单链表，并显示建立好以后的结果。 2.复杂度的要求，设计算法并用专门的函数实现算法； 3.理论与实践相结合...

## 数据结构课程作业 单链表 双链表 线性表 堆栈 等课程编程作业

• 2017年08月07日 18:40
• 2.55MB
• 下载

## 数据结构（线性表、单链表、双链表）

• 2015年12月29日 00:05
• 217KB
• 下载

## 数据结构：线性表之单链表

• leelit
• 2014年10月30日 18:10
• 736

## 《大话数据结构》第3章 线性表 3.8.2 单链表的删除

3.8.2 单链表的删除         现在我们再来看单链表的删除。设存储元素ai的结点为q，要实现将结点q删除单链表的操作，其实就是将它的前继结点的指针绕过，指向它的后继结点即可（如图3...

举报原因： 您举报文章：数据结构 线性表 建立单链表（头插法） 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)