各个分步骤的具体实现算法书本上都有,而且不看书自己也可以解决。

下面就是代码的具体实现细节。对于初学者希望有所帮助。

具体注释都会写在代码中,不懂的我们可以交流学习。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 20
typedef int ElemType;
typedef struct
{
ElemType data[MAXSIZE];
int length;
/*线性表当前长度*/
}SqList;

#define OK 1
#define ERROR 0
#define TURE 1
#define FALSE 0
typedef int Status;/*Status是函数类型,其返回值可以为结果状态代码,就是上面定义的ERROR OK等*/
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//初始化链表
Status initList(SqList &L)
{
if (!L.data)//为什么这句就把L给初始化了??????(就仅仅这一句(if(L.data))就给初始化了)//和这句没关系,我懂了
{
printf("初始化失败\n");
exit(0);
}
else{
printf("初始化成功\n");
}
L.length=0;
//return L//return 不是必要的,取决于调用方式;
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//return the elem of sqlist
Status GetElem(SqList L,int i,ElemType *e)//使用指针*e就不需要返回值了。
{

if(L.length==0||i>L.length)
{
printf("Read the position error\n");
return ERROR;
}
*e=L.data[i-1];
return OK;
}

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//insert elem to sqlist
Status ListInsert(SqList *L,int i,ElemType e)//插入数据不需要用*e;此处i为第几个,不是从零开始
{
int k;
if(i<1||i>L->length+1)//此处不能用L.length 因为不是*L,而是&L
{
printf("插入位置有误\n");
return ERROR;
}
if(L->length==MAXSIZE)
{
printf("数组已经满\n");
return ERROR;
}
if(i=L->length+1)//插入尾部
{
L->data[L->length]=e;

}
if(i<=L->length)//不插入尾部
{
for(k=L->length-1;k>=i-1;k--)
{
L->data[k+1]=L->data[k];
}
L->data[i-1]=e;
}

L->length++;
}

///delect the element of List
//delect the ith elemnet of List,and return the value by e
Status ListDelete(SqList *L,int i,ElemType *e)//if in the form of SqList *L is SqList L,It just is parameter,then it will not changed the L
{

int k;
if(i<1||i>L->length)
{
printf("read the position error\n");
return ERROR;
}
*e=L->data[i-1];
for(k=i-1;k<=L->length-1;k++)
{
L->data[k]=L->data[k+1];
}
L->length--;
return OK;
}



int main()
{
int j;
int *a;
int b;
int s;
int i,w;//w代表位置
Status tureOrFalse;
//////////////////initialize the list
SqList L;//已经初始化
initList(L);  /////////////////插入元素 ElemType ee; for(i=0;i<3;i++)//插入3个数字试试 { printf("请输入要插入的位置和数字(a和b)"); scanf("%d%d",&w,&ee); ListInsert(&L,w,ee);//&&&&不能用*啊,只能用&,&代表地址,   } printf("____________________\n"); /////////////////取出元素 ElemType *e; e=&b; for(i=0;i<L.length;i++)//use L.length to read all data { printf("请输入要读取的位置"); scanf("%d",&w); tureOrFalse=GetElem(L,w,e);//L是个结构体类型,w是个整形,e是指针, if(tureOrFalse==OK) { printf("取出的元素为%d\n",*e); } } printf("__________________________\n"); //////////////////delete the Element  j=L.length; for(i=0;i<j+2;i++)//use L.length to delect all data; { printf("当前数组长度%d\n",L.length); printf("请输入要删除的数据的位置 "); scanf("%d",&w); tureOrFalse=ListDelete(&L,w,e);//&L  if(tureOrFalse==OK) { printf("Delete data is:%d\n",*e); } printf("____________________\n"); } printf(">>>>>>>>>>>>>>>>WELL DONE>>>>>>>>>>>>>>\n"); while(1); }
01-25 23:33