動態建立順序表,並進行插入刪除操作
阿新 • • 發佈:2019-02-05
程式碼程式:
#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;
}