首先是构造链表
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef struct{
int *elem;
int length;
}SqList;//定义一个结构体
void InitList(SqList *L)//构造一个空的链表
{
L->elem=(int *)malloc(MAXSIZE*sizeof(int));//申请一块动态内存
if(L->elem)//如果申请成功
{
L->length=0;
printf("申请成功\n");
}
else
printf("申请失败\n");
}
int main()
{
SqList L;
InitList(&L);
return 0;
}
然后是填充这个链表(插入链表)
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef struct{
int *elem;
int length;
}SqList;//定义一个结构体
int InitList(SqList *L)//构造一个空的链表
{
L->elem=(int *)malloc(MAXSIZE*sizeof(int));//申请一块动态内存
if(L->elem)//如果申请成功
{
L->length=0;
return 1;
}
else
return 0;
}
int ListInsert(SqList *L,int i,int e)//填充链表(插入数据)
{
int j;
if((i<1)||(i>L->length+1))//插入的位置不能小于1或者大于链表长度+1
return 0;
if(L->length==MAXSIZE)//链表长度超出分配的内存
return 0;
for(j=L->length-1;j>=i-1;j--)//将插入的位置腾出来
L->elem[j+1]=L->elem[j];
L->elem[i-1]=e;//将元素插入
++L->length;//链表长度+1
return 1;
}
int main()
{
SqList L;
int i,n,e,m;
InitList(&L);
printf("请输入链表的长度:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&e);//输入要插入到链表内的内容
ListInsert(&L,1,e);//每次都插入到第一个位置上(相当于倒叙插入)
}
for(i=L.length-1;i>=0;i--)//将链表输出
printf("%d ",L.elem[i]);
return 0;
}
然后是链表的取值
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef struct{
int *elem;
int length;
}SqList;//定义一个结构体
int InitList(SqList *L)//构造一个空的链表
{
L->elem=(int *)malloc(MAXSIZE*sizeof(int));//申请一块动态内存
if(L->elem)//如果申请成功
{
L->length=0;
return 1;
}
else
return 0;
}
int ListInsert(SqList *L,int i,int e)//填充链表(插入数据)
{
int j;
if((i<1)||(i>L->length+1))//插入的位置不能小于1或者大于链表长度+1
return 0;
if(L->length==MAXSIZE)//链表长度超出分配的内存
return 0;
for(j=L->length-1;j>=i-1;j--)//将插入的位置腾出来
L->elem[j+1]=L->elem[j];
L->elem[i-1]=e;//将元素插入
++L->length;//链表长度+1
return 1;
}
int GetElem(SqList *L,int i)//取值链表
{
int e;
if(i<1||i>L->length)
return 0;
e=L->elem[i-1];//值为下标-1
return e;
}
int main()
{
SqList L;
int i,n,e,m;
InitList(&L);
printf("请输入链表的长度:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&e);//输入要插入到链表内的内容
ListInsert(&L,1,e);//每次都插入到第一个位置上(相当于倒叙插入)
}
printf("请输入要输出第i位的链表值的i为:");
scanf("%d",&i);
m=GetElem(&L,i);
printf("第%d位的值为:%d",i,m);
return 0;
}
链表的查找
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef struct{
int *elem;
int length;
}SqList;//定义一个结构体
int InitList(SqList *L)//构造一个空的链表
{
L->elem=(int *)malloc(MAXSIZE*sizeof(int));//申请一块动态内存
if(L->elem)//如果申请成功
{
L->length=0;
return 1;
}
else
return 0;
}
int ListInsert(SqList *L,int i,int e)//填充链表(插入数据)
{
int j;
if((i<1)||(i>L->length+1))//插入的位置不能小于1或者大于链表长度+1
return 0;
if(L->length==MAXSIZE)//链表长度超出分配的内存
return 0;
for(j=L->length-1;j>=i-1;j--)//将插入的位置腾出来
L->elem[j+1]=L->elem[j];
L->elem[i-1]=e;//将元素插入
++L->length;//链表长度+1
return 1;
}
int LocateElem(SqList *L,int e)
{
int i;
for(i=0;i<L->length;i++)
if(L->elem[i]==e)
return i+1;
return -1;
}
int main()
{
SqList L;
int i,n,e,m;
InitList(&L);
printf("请输入链表的长度:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&e);//输入要插入到链表内的内容
ListInsert(&L,1,e);//每次都插入到第一个位置上(相当于倒叙插入)
}
printf("请输入要查找的数:");
scanf("%d",&i);
m=LocateElem(&L,i);
if(m==-1)
printf("链表中不存在\n");
else
printf("要查找的数在第%d个位置",m);
return 0;
}
链表的删除
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef struct{
int *elem;
int length;
}SqList;//定义一个结构体
int InitList(SqList *L)//构造一个空的链表
{
L->elem=(int *)malloc(MAXSIZE*sizeof(int));//申请一块动态内存
if(L->elem)//如果申请成功
{
L->length=0;
return 1;
}
else
return 0;
}
int ListInsert(SqList *L,int i,int e)//填充链表(插入数据)
{
int j;
if((i<1)||(i>L->length+1))//插入的位置不能小于1或者大于链表长度+1
return 0;
if(L->length==MAXSIZE)//链表长度超出分配的内存
return 0;
for(j=L->length-1;j>=i-1;j--)//将插入的位置腾出来
L->elem[j+1]=L->elem[j];
L->elem[i-1]=e;//将元素插入
++L->length;//链表长度+1
return 1;
}
int ListDelete(SqList *L,int i)
{
int j;
if(i<1||i>MAXSIZE)
return 0;
for(j=i-1;j<L->length;j++)
L->elem[j]=L->elem[j+1];
--L->length;
return 1;
}
int main()
{
SqList L;
int i,n,e,m;
InitList(&L);
printf("请输入链表的长度:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&e);//输入要插入到链表内的内容
ListInsert(&L,1,e);//每次都插入到第一个位置上(相当于倒叙插入)
}
printf("请输入要删除的位置:");
scanf("%d",&i);
ListDelete(&L,i);
for(i=L.length-1;i>=0;i--)//将链表输出
printf("%d ",L.elem[i]);
return 0;
}