动态链表链表

来源:互联网 发布:买卖二代身份证 淘宝 编辑:程序博客网 时间:2024/06/11 21:11
#include<stdio.h>#include<conio.h>#include<stdlib.h>#define maxsize 10typedef 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();}

0 0
原创粉丝点击