您的位置:首页 > 编程语言 > C语言/C++

静态与动态顺序表操作的C语言实现

2016-09-26 14:18 411 查看

1.操作静态顺序表

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 10

//插入

void InsertElem(int sqlist[], int *len, int i, int a)
{
int t;

if ((i<1) || (i>*len+1) || (*len == MAXSIZE)) //超出删除范围
{
printf("\nillegal\n");
return;
}

for (t = *len - 1; t >= i-1; t--)
{
sqlist[t + 1] = sqlist[t];  //从最后一个元素开始依次向后移动一位,直到移动完成要插入的位置的元素
}
sqlist[i - 1] = a;
(*len)++;
}

//删除

void DelElem(int sqlist[], int *len, int i)
{
int t;

if ((i<0) || (i>*len))
{
printf("\nillegal\n");
return;
}

for (t = i; t <= *len - 1; t++)
{
sqlist[t - 1] = sqlist[t];  //从将要删除的元素的位置的下一个位置开始,将元素依次向前移动一位
}
(*len)--;
}

int main()
{
int sqlist[MAXSIZE];
int len = 6;//初始表长度;
int i;

printf("current numbers:>");
for (i = 0; i < len; i++)
{
sqlist[i] = i + 1;
printf("%d ", sqlist[i]);
}

printf("\ncurrent length:%d",len);

printf("\n在第3个位置插入0:");
InsertElem(sqlist, &len, 3, 0);
for (i = 0; i < len; i++)
printf("%d ", sqlist[i]);
printf("\ncurrent length:%d", len);

printf("\n在第11个位置插入元素:\n");
InsertElem(sqlist, &len, 11, 0);

printf("\n删除第3个元素:");
DelElem(sqlist, &len, 3);
for (i = 0; i < len; i++)
printf("%d ", sqlist[i]);
printf("\ncurrent length:%d", len);

printf("\n删除第11个元素:");
DelElem(sqlist, &len, 11);

system("pause");
return 0;
}


2.操作动态顺序表

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 10

//创建
typedef struct sqlist
{
int *elem;
int length;// 当前表长
int listsize;//当前表的最大长度
}sqlist;

//初始化
void InitSqlist(sqlist *L)
{
L->elem = (int *)malloc(MAXSIZE*sizeof(int));//开辟能存放最大元素个数的空间
if (L->elem == NULL)
{
perror("error:");
return;
}

L->length = 0;
L->listsize = MAXSIZE;
}

//插入

void InsertElem(sqlist *L, int i, int a)
{
int *base = NULL;
int *insertptr = NULL;
int *p = NULL;

if ((i < 1) || (i > L->length + 1))
{
printf("illegal");
return;
}

if (L->length >= L->listsize)
{
base = (int *)realloc(L->elem, (L->listsize + 10)*sizeof(int));

if (base == NULL)
{
free(L->elem);
return;
}
else
{
L->elem = base;
L->listsize = L->listsize + 10;
}
}

insertptr = &(L->elem[i - 1]);//当前要插入的元素的位置

for (p = &(L->elem[L->length - 1]); p >= insertptr; p++)
*(p + 1) = *p;

*insertptr = a;
(L->length)++;
}

//删除

void DelElem(sqlist *L, int i)
{
int *p;

if ((i<0) || (i > L->length))
{
printf("illegal");
return;
}

for (p = &(L->elem[i]); p <= &(L->elem[L->length - 1]); p++)
*(p - 1) = *p;

(L->length)--;
}

int main()
{
sqlist l;
int i;

InitSqlist(&l);//初始化顺序表l

for (i = 0; i < 15; i++)//插入15个元素
InsertElem(&l, i + 1, i + 1);
printf("current elements:");
for (i = 0; i < l.length; i++)
printf("%d ", l.elem[i]);

DelElem(&l, 3);//删除第3个元素
printf("\n删除第3个元素:");
for (i = 0; i < l.length; i++)
printf("%d ", l.elem[i]);

printf("\n删除第16个元素:");
DelElem(&l, 16);//非法删除

system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 顺序表