1. 程式人生 > >動態建立順序表,並進行插入刪除操作

動態建立順序表,並進行插入刪除操作

程式碼程式:

#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; }

這裡寫圖片描述