#include <stdio.h>
#include <stdlib.h>
#define maxsize 10
#define elemtype int
struct lnode{
elemtype data[maxsize];//数据区域(数组)
int last;// 最后一个元素的位置
};
typedef struct lnode *list;
struct lnode l;
list ptrl;
list makeempty()//创建空表
{
list ptrl=(list)malloc(sizeof(struct lnode));
ptrl->last=-1;
return ptrl;
}
elemtype findkth(int k,list l)//查找第K个元素,并返回
{
if(k<1 || k>l->last+1){
printf("NO%d is invalid!\n",k);
return -1;
}
return l->data[k+1];
}
int find(elemtype x,list ptrl)//查找元素x,返回他的位置
{
int i;
for(i=0;i<=ptrl->last;i++){
if(ptrl->data[i]==x) return i;
}
printf("element x is not available!\n");
return -1;
}
void insert(elemtype x,int i,list ptrl)//在第i个位置插入元素x
{
if(ptrl->last==maxsize-1){
printf("the list is overflowed!\n");
return;
}
if(i<1 || i>ptrl->last+2){
printf("illegal insertion!\n");
return;
}
int j;
for(j=ptrl->last;j>=i-1;j--){
ptrl->data[j+1]=ptrl->data[j];//元素值后移一位
}
ptrl->data[i-1]=x;
ptrl->last++;
return;
}
void dele(int i,list ptrl)//删除线性表里面第i个元素
{
if(i<1 || i>ptrl->last+1){
printf("illegal deletion!\n");
}
int j;
for(j=i-1;j<=ptrl->last;j++){
ptrl->data[j]=ptrl->data[j+1];
}
ptrl->last--;
return;
}
#include <stdlib.h>
#define maxsize 10
#define elemtype int
struct lnode{
elemtype data[maxsize];//数据区域(数组)
int last;// 最后一个元素的位置
};
typedef struct lnode *list;
struct lnode l;
list ptrl;
list makeempty()//创建空表
{
list ptrl=(list)malloc(sizeof(struct lnode));
ptrl->last=-1;
return ptrl;
}
elemtype findkth(int k,list l)//查找第K个元素,并返回
{
if(k<1 || k>l->last+1){
printf("NO%d is invalid!\n",k);
return -1;
}
return l->data[k+1];
}
int find(elemtype x,list ptrl)//查找元素x,返回他的位置
{
int i;
for(i=0;i<=ptrl->last;i++){
if(ptrl->data[i]==x) return i;
}
printf("element x is not available!\n");
return -1;
}
void insert(elemtype x,int i,list ptrl)//在第i个位置插入元素x
{
if(ptrl->last==maxsize-1){
printf("the list is overflowed!\n");
return;
}
if(i<1 || i>ptrl->last+2){
printf("illegal insertion!\n");
return;
}
int j;
for(j=ptrl->last;j>=i-1;j--){
ptrl->data[j+1]=ptrl->data[j];//元素值后移一位
}
ptrl->data[i-1]=x;
ptrl->last++;
return;
}
void dele(int i,list ptrl)//删除线性表里面第i个元素
{
if(i<1 || i>ptrl->last+1){
printf("illegal deletion!\n");
}
int j;
for(j=i-1;j<=ptrl->last;j++){
ptrl->data[j]=ptrl->data[j+1];
}
ptrl->last--;
return;
}
//以下是主函数验证部分
//成功了,好开心,哈哈哈!
int main()
{
list l=makeempty();
printf("%d\n",l->last);
insert(0,1,l);
insert(1,2,l);
insert(2,3,l);
insert(3,4,l);
insert(4,5,l);
insert(5,6,l);
insert(6,7,l);
insert(7,8,l);
insert(8,9,l);
insert(9,10,l);
int getNum=find(8,l);
printf("%d\n",getNum);
elemtype e=findkth(5,l);
printf("%d\n",e);
printf("%d\n",l->last);
dele(10,l);
printf("%d",l->last);
return 0;
}
int main()
{
list l=makeempty();
printf("%d\n",l->last);
insert(0,1,l);
insert(1,2,l);
insert(2,3,l);
insert(3,4,l);
insert(4,5,l);
insert(5,6,l);
insert(6,7,l);
insert(7,8,l);
insert(8,9,l);
insert(9,10,l);
int getNum=find(8,l);
printf("%d\n",getNum);
elemtype e=findkth(5,l);
printf("%d\n",e);
printf("%d\n",l->last);
dele(10,l);
printf("%d",l->last);
return 0;
}