当先锋百科网

首页 1 2 3 4 5 6 7

vs2017可运行,功能函数可以根据需要变更,主要功能

1、无需设置循环,即可实现插入元素

2、线性表整表删除

3、显示当前长度

4、在某个位置插入元素

5、删除某个位置上的元素

6、显示当前表中所有元素是

#include<stdio.h>
#include<stdlib.h>#define INITIAL_LIST 3//初始化时分配的空间大小
#define CREAT_LIST 2//当空间不足时每次增加的空间大小struct Sqlist {int *elem;//用于指向系统分配的空间的首地址int NowLength;//线性表当前的长度int length;//线性表分配到的长度int listSize;//空间不足时为线性表所分配的空间大小
};void InitList( Sqlist &L) {L.elem = (int *)malloc(INITIAL_LIST * sizeof(int));//分配10相同类型的连续空间并把他们的首地址赋值给elemL.NowLength = 0;//线性表的初始值当然是0L.listSize = CREAT_LIST;//当长度不够时每次增加两个单元L.length = INITIAL_LIST ;//线性表分配的长度}void SaveElem(Sqlist &L) {int *NewBase;int data;while (true){scanf_s("%d", &data);if (data != 0) {if (L.NowLength < L.length-1) {L.elem[L.NowLength] = data;L.NowLength++;}else {	//在原来的基础上再增加两个单元的空间NewBase = (int *)realloc(L.elem, (L.length + CREAT_LIST) * sizeof(int));L.elem = NewBase;L.length = L.length + CREAT_LIST; L.elem[L.NowLength] = data;//存储由于空间不足而没有存储的数据L.NowLength++;}}elsebreak;}
}void PrintList(Sqlist L) {int i = 0;while (i<L.NowLength) {printf("%d ", L.elem[i]);i++;}printf("\n");system("pause");
}void DestoryList(Sqlist &L) {free(L.elem);L.elem = NULL;L.length = 0;L.NowLength = 0;}void  ListLength(Sqlist L) {printf("当前线性表的长度为%d\n", L.NowLength) ;
}void GetElem(Sqlist &L) {//初始条件:线性表L已存在,1<=i<=L.NowLengthint i;int e;printf("想找第几个位置上的元素:?\n");scanf_s("%d", &i);//输入要查找的元素的位置if (i<1 || i>L.NowLength) {printf("查找的位置不对\n");}else{e = *(L.elem + i - 1);printf("%d", e);}system("pause");
}void ListInsert(Sqlist &L) {//在线性表的某个位置插入某个元素int *newbase;int i, e;int *p,*q;//p用来保存断开的线性表printf("输入想要插入的元素的位置:\n");scanf_s("%d", &i);printf("输入想要插入的元素:\n");scanf_s("%d", &e);if (i<1 || i>L.length + 1) {printf("插入位置不对\n");}//如果存储空间不足将增加新空间if (L.NowLength + 1 > L.length) {newbase = (int *)realloc(L.elem, (L.length + CREAT_LIST) * sizeof(int));L.elem = newbase;L.length += CREAT_LIST;}p = &L.elem[i-1];//保存要插入的位置,用于结束循环和存储元素for (q = &L.elem[L.NowLength-1]; q >= p; q--) {*(q + 1) = *q;}*p = e;	L.NowLength++;
}void ListDelete(Sqlist &L) {int *p,*q;int i;q = &L.elem[L.NowLength - 1];printf("输入想要删除的元素的位置:\n");scanf_s("%d", &i);for (p = &L.elem[i-1]; q >= p; p++) {*p = *(p + 1);}L.NowLength--;
}int main() {Sqlist L;//创建一个名为L的线性表InitList(L);//初始化线性表SaveElem(L);//通过键盘见数据存入表中//PrintList(L);//打印当前表中的元素//DestoryList(L);//销毁线性表//ListLength(L);//当前线性表的长度//GetElem(L);//查找第某个位置上的元素//ListInsert(L);//在某个位置插入元素//ListDelete(L);//删除某个位置上的元素//ListLength(L);//当前线性表的长度//PrintList(L);//打印当前表中的元素}