配色有点恶心,随便弄了点颜色 ,这样看着方便一点,这里完全使用了指针来操作数组
这个算很简单的了,先给些简单的,看看大家的反响吧,我c语言也不是特别好,所以还希望大家可以靠电脑社这个平台来相互学习下
有关java 和python的大家也可以找我交流
以后会经常发这样的帖子
---------其实我不坏(王涛)
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
//这里是以int类型来做个例子,elem可以是任意类型,换成ElemType就好了
typedef
struct
{
int
length;
int
*elem ;
int
listsize;
}SqList;
//线性表初始化
SqList
InitList_Sq
(SqList
L
){
//
为容器分配存储空间
L.elem = (int *)
malloc
(
LIST_INIT_SIZE
*
sizeof
(int));
int k = 0;
if(!L.elem)
exit
(1);
L.length = 0;
L.listsize =
LIST_INIT_SIZE
;
return
L;
}
//在顺序线性表L中第i个位置之前插入新的元素e
//线性表的顺序表示在插入元素的时候需要把插入位置之后的元素都向后移动一个位置
//L:将要被操作的线性表,i要插入的位置,e要插入的元素
SqList ListInsert_Sq (SqList L, int i , int e){
printf
(
"被插入的元素是%d\n"
,e);
//首先判断i值是否合法
if
(i<1||i>L.length+1){
printf
(
"你选择要插入的位置已经超出了线性表的界限\n"
);return L;}
if
(
L
.length >=
L
.listsize){
int
*newbase = (int *)
realloc
(
L
.elem,(
L
.listsize+
LISTINCREMENT
)*
sizeof
(int));
if
(!newbase)
exit
(1);
L
.elem = newbase;
L
.listsize =
L
.listsize+
LISTINCREMENT
;
printf
(
"内存不足,需要扩充"
);
}
int
*q = (
L
.elem+i-1);
//要插入的位置
printf
(
"插入位置的当前值是 %d\n"
, *q);
int
*p;
if
(
L
.length>0)
for
(p = (
L
.elem+(
L
.length-1));p>=q;--p)
{
printf
(
"表尾的元素值是%d\n
",*(
L
.elem+(L.length-1)));
*(p+1) = *p;
//从最后一个元素开始把元素依次向后移动一个位置
printf
(
"被移动的元素是%d\n"
,*(p+1));
}
*q = e;
++
L
.length;
return
L
;
}
void
printList
(SqList
L
){
printf
(
"-----------------------------\n"
);
int
i;
int
array[
L
.length];
for
(i = 0;i<(
L
.length);i++){
array[i] = *(
L
.
elem+i);
printf
("
L
[%d]=%d\n",i,array[i]);
}
printf
(
"-----------------------------\n"
);
}
int
main
(
void
){
SqList L;
L
=
InitList_Sq
(
L
);
printf("%d\n",
L
.length);
L
=
ListInsert_Sq
(L,5,1);
L
=
ListInsert_Sq
(L,1,1);
L
=
ListInsert_Sq
(L,1,1);
L
=
ListInsert_Sq
(L,1,2);
L
=
ListInsert_Sq
(L,1,3);
L
=
ListInsert_Sq
(L,1,4);
printf
(
"%d\n"
,
L
.length);
printList
(
L
);
system
(
"PAUSE"
);
return
0;
}