//文件LinerList.h,包含线性链表的操作声明
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
//预定义常量
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2
//线性链表元素数据类型定义
typedef int ElemType;
//布尔类型定义
typedef int BOOL;
//函数返回类型定义
typedef int Status;
typedef struct LNode{ //线性链表的结点类型定义
ElemType data; //数据域
LNode *next; //下一结点指针
} *LinkList;
//线性链表操作的函数原型声明
Status ListInsert(LinkList &L,int i,ElemType e); //向表中插入指定元素
Status ListDelete(LinkList &L,int i,ElemType &e); //从表中删除指定位置的元素
Status ListTraverse(LinkList L); //遍历表,输出每个表元素值
/*函数操作*/
/*第一种*/Status ListInsert(LinkList &L,int i,ElemType e) //向表中插入指定元素
{
int k=0;
LNode *p=L->next,*q=L,*s;
if (i<1) //i非法
return ERROR;
while (q)
{
k++;
if (k==i)
{ //新元素插入在q与p之间
s = (LNode *)malloc(sizeof(LNode)); //生成待插入结点
s->data=e;
s->next=p; //修改链接
q->next=s;
return OK;
}
q=p; //指针后移
p=p->next;
}
return ERROR; //i非法,过大
}
/*第二种*/Status ListInsert(LinkList &L, int i,ElemType e)
// 在带头结点的单链线性表L中第i个位置之前插入数据元素e
{
LinkList p=L,s; //初始化p指向头节点
int j=0;
while(p&&j<i-1) //使p指向第i-1个节点
{
j++;
p=p->next;
}
if(j>i) //该节点不存在
return ERROR;
LinkList q=(LinkList)malloc(sizeof(LNode));
//创建新节点并将之连接到第i个节点之前
q->data=e;
q->next=p->next;cout<<"判断"<<endl;
p->next=q;
return OK;
};
/*main PS:停止运行的程序*/
#include"SqList.h"
int main()
{
LinkList L;
creat(L);
int i;
ElemType num;
cout<<" 任务一!!"<<endl;
srand(time(NULL));
for(i=0;i<10;i++)
{ num=rand()%99;
cout<<"随机数"<<endl;
ListInsert(L,i+1,num);
}
PrintList(L);
return 0;
}
/*main PS:成功运行的程序*/
//文件mn.cpp
#include "LinerList.h"
int main()
{
LinkList L1,L2,L3;
ElemType e;
int i;
InitList(L1); //构造空的单链表L1
InitList(L2); //构造空的单链表L2
printf("请输入表L1元素值,共5个\n");
for (i=0;i<5;i++)
{ scanf("%d",&e);
ListInsert(L1,i+1,e); //向表中插入用户输入的元素值
}
printf("请输入表L2元素值,共3个\n");
for (i=0;i<3;i++)
{ scanf("%d",&e);
ListInsert(L2,i+1,e); //向表中插入用户输入的元素值
}
return 0;
}