2.2顺序表插入
//顺序表存储结构
#define MAXSIZE 100
typedef struct{
Type elem[MAXSIZE];
int last ;
}List;
#define OK 1
#define ERROR 0
//在顺序表L中第i个数据元素之前插入一个元素e。
//i的合法取值范围1<=i<=last+2
int InsList(List *L,int i,Type e)
{
int k;
//判断插入位置是否合法
//边界点 1 (1之前为位置0) last+1 (last+1 之前为位置last)
if(i<1||i>last+1){
printf("插入位置i不合法");
return ERROR;
}
//判断是否能够插入
//最后一个元素已经是 MAXSIAZE-1
if(L->last>=MAXSIAZE-1){
printf("表已满,无法插入");
return ERROR;
}
//为插入元素移动位置 i-1把i-1的元素移走
for(k=L->last;k>=i-1;k--){
L->elem[k+1]=L->elem[k];
}
L->elem[i-1]=e;//第i个数据元素之前插入一个元素e
L->last++;//修改尾指针
return OK:
}
2.3顺序表删除
#define OK 1
#define ERROR 0
//在顺序表L中删除第i个数据元素,并用指针参数e返回其值。
//i的合法取值范围1<=i<=last+1
int InsList(List *L,int i,Type e)
{
int k;
//判断删除位置是否合法
//边界点 1 (1之前为位置0) last+1 (last+1 之前为位置last)
if(i<1||i>last+1){
printf("删除位置i不合法");
return ERROR;
}
*e =L->elem[i-1];//将删除元素放入指针e带出
//为插入元素移动位置 i-1把i-1的元素移走
for(k=i;i<=L->last;k--){
L->elem[k-1]=L->elem[k];
}//last最后一个元素的下标
L->last--;//修改尾指针
return OK:
}
//单链表的存储结构
//Node结点类型定义
typedef struct Node{
Type data;
struct Node* next;
}Node,*List; //*List结构指针类型
//初始化单链表
InitList(List *L)
{
*L=(List)malloc(sizeof(Node));//建立头节点List头指针类型
(*L)->next=NULL;
}
//头插法建立单链表
void CreatFromHead(List L){
char c;
Node *s;
int flag=1;
while(flag){
c=getchar();//获得字符串
if(c!=$){
s=(Node*)malloc (sizeof(Node));//申请新结点
s->data=c;
s->next=L->next;
L->next=s;
}
else flag=0;
}
}
//尾插法建立单链表
void CreatFromTail(List L){
Node *s,*r;r=L;//初始化
char c;
int flag=1;
while(flag){
c=getchar();
if(c!=$){
s=(Node*)malloc(siazeof(Node));
s->data=c;
r->next=s;//尾插
r=s;//修改尾指针
}
else {
flag=0;
r->next=NULL;
}
}
}
//单链表的删除
int Insert(List L,int i,Type e){
Node *pre,*s;
pre=L;
int k=0;
if(i<0){
printf("输入位置不合法");
return EROOR;
}
while(pre!=NULL&&k<i-1){
pre=pre->next;
k=k+1;
}
if(Pre==NULL){
printf("输入位置不合法");
return EROOR;
}
s->data=e;
s->next=pre->next;
pre->next=s;
return OK:
}
//单链表删除
int DelList(List L,int i,Type *e){
Node *pre,*s;//s指向待删元素的指针
pre=L;
int k=0;
while(Pre->next!=NULL&&k<i-1){
pre=pre->next;
k=k+1;
}
if(Pre->next==NULL||i<1){
printf("删除位置不合法");
return ERROR;
}
s=pre->next;
pre->next=s->next;
*e=s->data;
free(s);
return OK:
}
//线性表的链式存储
typedef int ElemType;
//单链表存储结构的描述
typedef struct Node//结点类型定义
{
ElemType data;
struct Node* next;
} Node,*LinkList;
//初始化单链表
InitList(LinkList *L)
{
/* L是单链表的头指针,它指向表中第一个结点,(对于带头结点的单链表,则指向单链表的头结点)
L=NULL,单链表为空,长度为0 (对于带头结点的单链表,L->next=NUll)
有头结点 L是指向单链表的头结点的指针(指针是地址),用来接受头指针变量的地址
*L头指针变量(存储值为地址的变量),在主程序中用来初始化单链表
*/
*L=(LinkList)malloc(sizeof(Node));//建立头结点
(*L)->next=NUll;//建立空的单链表L
}