代码程序:
#include"stdio.h"
#include<iostream>
#include"stdlib.h"
using namespace std;
#define maxsize 10
typedef struct{
int*elem;
int length;
int listsize;
}sqlist;
void initiallist(sqlist *l)//动态的创建一个顺序表
{
l->elem = (int *)malloc(maxsize*sizeof(int));
if (!l->elem)
return;
l->length = 0;
l->listsize = maxsize;
}
void insertelem(sqlist*l, int i, int item)//插入一个元素
{
if (i<1 || i>l->length+1)//判断是否插入非法
{
cout << "插入非法" << endl;
return;
}
int*base = 0;
if (l->length >= l->listsize)//如果元素个数等于最大容量,进行容量扩展,这是动态创建顺序表的好处。
{
base = (int*)realloc(l->elem,(maxsize + 10)*sizeof(int));
l->elem = base;
l->listsize = maxsize + 10;
}
int*p = l->elem + l->length - 1;
for (; p >= (l->elem + i - 1); p--)//将i位置后每一个元素后移
*(p + 1) = *p;
*(l->elem + i - 1) = item;
l->length++;
}
void deleteelem(sqlist*l, int i)//删除一个元素
{
if (i<1 || i>l->length)//判断是否删除非法
{
cout << "删除非法" << endl;
return;
}
int*p = l->elem + i;
for (; p <= (l->elem + l->length - 1); p++)//将i位置后每一个元素前移
*(p - 1) = *p;
l->length--;
}
int main()
{
sqlist l;
initiallist(&l);//初始化链表
for (int i = 0; i < 15;i++)//插入15个元素
insertelem(&l, i + 1, i + 1);
printf("the content of the list is:\n");
for (int i = 0; i < l.length; i++)
printf("%d ", l.elem[i]);
deleteelem(&l, 5);//删除一个元素后
printf("\ndelete the fifth element\n");
for (int i = 0; i < l.length; i++)
printf("%d ", l.elem[i]);
system("pause");
return 0;
}