#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define maxsize 10
typedef int ElemType;
typedef struct{
int *elem;
int length;
int listsize;
}sqlist;
void initsqlist(sqlist *l){ //初始化一个链表
l->elem = (int *)malloc(maxsize * sizeof(ElemType));//强制转换为int型,分配maxsize个ElemType类型的空间
if(!l->elem) exit(0); //如果没有分配到地址则退出
l->length=0; //初始化链表的长度等于0
l->listsize = maxsize; //存储空间容量
}
void insertelem(sqlist *l,int i,ElemType item){
ElemType *base,*insertptr,*p;
if(i<1||i>l->length+1) exit(0); // 位置溢出
if(l->length >= l->listsize){ //定义新的链表存储空间
base = (ElemType*)realloc(l->elem,(l->listsize+10)*sizeof(ElemType));//指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)
l->elem = base; //将链表的头定义到第一处
l->listsize = l->listsize+100; //加大存储容量
}
insertptr = &(l->elem[i-1]); //插入位置的地址
for(p = &(l->elem[l->length-1]);p >= insertptr;p--)//找到这个地址并且插入
*(p+1)=*p;
*insertptr=item; //将要插入的数据复制到这个地址
l->length++; //链表的长度加一
}
void delelem(sqlist *l,int i){
ElemType *delitem,*q;
if(i<1||i>l->length) //测试是否越界
exit(0);
delitem = &(l->elem[i-1]); //将要删除元素的地址给过来
q=l->elem+l->length-1; //整个链表的长度
for(++delitem;delitem <=q;++delitem ) //将要删除元素之后的元素统一前移一个单位
{
int temp1,temp2;
temp1=*(delitem-1);
temp2=*delitem;
temp1=temp2;
}
l->length--; //链表长度减一
}
main(){
sqlist l;
int i ;
initsqlist(&l);
for(i=0;i<15;i++)
insertelem(&l,i+1,i+1);
printf("the content of the list is\n");
for(i=0;i<l.length;i++)
printf("%d\n",l.elem[i]);
delelem(&l,5);
printf("delete the fifth element\n");
for(i=0;i<l.length;i++)
printf("%d\n",l.elem[i]);
getche();
}
动态链表链表
最新推荐文章于 2022-04-13 07:14:20 发布