先看运行结果:
代码如下:
#include<stdio.h>
#include<malloc.h>
#include<conio.h>
#define maxSize 8 //数组空间的大小,10个单元可以不放满。
typedef struct sequenlist{
int last; //线性表满的时候,为last为9;代表了数组下标;
int data[maxSize];
}sequenlist;
//函数声明部分
void creatlist(sequenlist*L); //创建顺序表并初始化
int dellist(sequenlist*L,int i); //删除之前要先创建
void printOut(sequenlist*L); //输出该线性表
int main(){
//创建一个长度为8的顺序表,要求删除第3个结点值,并输出
int i; //插入位置(或者删除,因为作用域的关系,不同函数中,也可以表示删除等操作)的位置
int e; //插入的数据
sequenlist *L; //声明指针*L (指向上面的结构体类型)
L=(sequenlist*)malloc(sizeof(sequenlist));//结构体指针在使用前要初始化
creatlist(L);
// printf("创建好的线性表如下:\n");
// printOut(L);
printf("当前数组的最大长度为8\t\t\t请输入你要删除的第几个节点:");
scanf("%d",&i);
//删除第 i个节点
dellist(L,i);
printOut(L);
getch();
}
void creatlist(sequenlist*L){ //创建长度为8的顺序表并初始化
int i=8; //因为作用域不同,所以可以在这里也用 i 表示数据的个数;
int j;
int temp; //表示插入的数据
printf("当前线性表的最大长度为8\n");//第几个节点;节点大小=下标大小+1;
// scanf("%d",&i);
for( j=0;j<i;j++){
printf("data[%d]=",j);
fflush(stdin);//清除键盘缓冲区;
scanf("%d",&temp);
L->data[j]=temp;
}
//别忘了写L-last;
L->last=j-1;
printf("\n");
}
void printOut(sequenlist*L){
int i;
for(i=0;i<L->last+1;i++){
printf("data[%d]=%d " ,i,L->data[i]);// data[i],并不代表L-data[i]
//L->last++; //会无限循环。
}
//L->last++;
}
int dellist(sequenlist*L,int i){
//删除第i个元素
//想象长度为8的数组 从第i+1个元素处 依次往前移动,第i个元素就会被覆盖,从而达到删除的目的1;
int j;
printf("被删除后的结果如下:\n");
if( i<0 || i>L->last ){
printf("你输入的节点位置错误。\n");
}else for( ; i<L->last+1; i++)//i代表第几个元素要被删除,L->是下标
{
L->data[i-1]=L->data[i];
}
L->last--;
}
(本人小白一枚,代码中也许会有不对的地方,请指正。)