利用指针取地址:
//线性表的删除操作,并且用e返回删除元素的值
#include<stdio.h>
#include<iostream>
using namespace std;
#define OVERFLOW -2
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 20//线性表存储空间的初始量
#define LISTINCREMENT 10//线性表存储空间的增量
typedef struct{
int *elem;//储存空间的基地址
int length;//当前长度
int listsize;//当前分配的储存容量
}SqList;
SqList l;
int InitList(SqList &l)
{
l.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));
if(!l.elem) exit(OVERFLOW);
l.length=0;
l.listsize=LIST_INIT_SIZE;
return OK;
}
int ListDelete(SqList &l,int i)
{
int *p,*q,e;
if(i<1 || i>l.length) return ERROR;
p=&(l.elem[i]);
e=*p;
for(q=p;q<=&(l.elem[l.length]);q++)
{
*q=*(q+1);
}
l.length--;
return e;
}
int main()
{
int i,j,e;
InitList(l);
cout<<"请输入线性表的长度:"<<endl;
cin>>l.length;
cout<<"请依次输入线性表的元素:"<<endl;
for(i=1;i<=l.length;i++)
cin>>l.elem[i];
cout<<"请输入想要删除几号元素:"<<endl;
cin>>j;
e=ListDelete(l,j);
cout<<"删除元素后线性表的序列为:"<<endl;
for(i=1;i<=l.length;i++)
cout<<l.elem[i]<<" ";
printf("\n");
cout<<"被删除的元素为:"<<endl;
cout<<e<<endl;
}
//12 13 21 24 28 31 42 77
//删除4号元素
常规算法:
//线性表的删除操作
#include<stdio.h>
#include<iostream>
using namespace std;
#define OVERFLOW -2
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 20//线性表存储空间的初始量
#define LISTINCREMENT 10//线性表存储空间的增量
typedef struct{
int *elem;//储存空间的基地址
int length;//当前长度
int listsize;//当前分配的储存容量
}SqList;
SqList l;
int InitList(SqList &l)
{
l.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));
if(!l.elem) exit(OVERFLOW);
l.length=0;
l.listsize=LIST_INIT_SIZE;
return OK;
}
int ListDelete(SqList &l,int i)
{
int j;
if(i<1 || i>l.length) return ERROR;
for(j=i;j<=l.length;j++)
{
l.elem[j]=l.elem[j+1];
}
l.length--;
}
int main()
{
int i,j;
InitList(l);
cout<<"请输入线性表的长度:"<<endl;
cin>>l.length;
cout<<"请依次输入线性表的元素:"<<endl;
for(i=1;i<=l.length;i++)
cin>>l.elem[i];
cout<<"请输入想要删除几号元素:"<<endl;
cin>>j;
ListDelete(l,j);
cout<<"删除元素后线性表的序列为:"<<endl;
for(i=1;i<=l.length;i++)
cout<<l.elem[i]<<" ";
}
//12 13 21 24 28 31 42 77
//删除4号元素
运行结果: