动态链表链表

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









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值