动态创建顺序表,并进行插入删除操作

来源:互联网 发布:疯狂java讲义的错误 编辑:程序博客网 时间:2024/06/07 05:02

代码程序:

#include"stdio.h"#include<iostream>#include"stdlib.h"using namespace std;#define maxsize 10typedef 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;}

这里写图片描述

0 0
原创粉丝点击