数据结构基本之线性表
发布日期:2021-05-07 15:59:01 浏览次数:16 分类:原创文章

本文共 2675 字,大约阅读时间需要 8 分钟。

2.2顺序表插入//顺序表存储结构#define MAXSIZE 100typedef struct{	Type elem[MAXSIZE];	int last ;}List;#define OK 1#define ERROR 0 //在顺序表L中第i个数据元素之前插入一个元素e。//i的合法取值范围1<=i<=last+2int InsList(List *L,int i,Type e){    int k;    //判断插入位置是否合法     //边界点 1 (1之前为位置0) last+1 (last+1 之前为位置last)    if(i<1||i>last+1){    	printf("插入位置i不合法");		return ERROR;     }    //判断是否能够插入     //最后一个元素已经是 MAXSIAZE-1    if(L->last>=MAXSIAZE-1){    	printf("表已满,无法插入");		return ERROR;     }    //为插入元素移动位置 i-1把i-1的元素移走     for(k=L->last;k>=i-1;k--){    	L->elem[k+1]=L->elem[k];    }    L->elem[i-1]=e;//第i个数据元素之前插入一个元素e     L->last++;//修改尾指针    return OK:}2.3顺序表删除#define OK 1#define ERROR 0 //在顺序表L中删除第i个数据元素,并用指针参数e返回其值。//i的合法取值范围1<=i<=last+1 int InsList(List *L,int i,Type e){    int k;    //判断删除位置是否合法     //边界点 1 (1之前为位置0) last+1 (last+1 之前为位置last)    if(i<1||i>last+1){    	printf("删除位置i不合法");		return ERROR;     }    *e =L->elem[i-1];//将删除元素放入指针e带出     //为插入元素移动位置 i-1把i-1的元素移走     for(k=i;i<=L->last;k--){    	L->elem[k-1]=L->elem[k];    }//last最后一个元素的下标     L->last--;//修改尾指针    return OK:}//单链表的存储结构//Node结点类型定义 typedef struct Node{	Type data;	struct Node* next; }Node,*List; //*List结构指针类型 //初始化单链表InitList(List *L){	*L=(List)malloc(sizeof(Node));//建立头节点List头指针类型 	(*L)->next=NULL;	 }//头插法建立单链表 void CreatFromHead(List L){	char c;	Node *s;	int flag=1;	while(flag){		c=getchar();//获得字符串		if(c!=$){		s=(Node*)malloc (sizeof(Node));//申请新结点		s->data=c;		s->next=L->next;		L->next=s; 		}		else flag=0;	}}//尾插法建立单链表 void CreatFromTail(List L){	Node *s,*r;r=L;//初始化 	char c;	int flag=1;	while(flag){		c=getchar();		if(c!=$){			s=(Node*)malloc(siazeof(Node));			s->data=c;			r->next=s;//尾插 			r=s;//修改尾指针 		}		else {			flag=0;			r->next=NULL;		} 	}}//单链表的删除int Insert(List L,int i,Type e){	Node *pre,*s;	pre=L;	int k=0;	if(i<0){			printf("输入位置不合法");		return EROOR; 	}	while(pre!=NULL&&k<i-1){		pre=pre->next;		k=k+1;	}	if(Pre==NULL){		printf("输入位置不合法");		return EROOR; 	}	s->data=e;	s->next=pre->next;	pre->next=s;	return OK:}//单链表删除int DelList(List L,int i,Type *e){	Node *pre,*s;//s指向待删元素的指针	pre=L;	int k=0; 	while(Pre->next!=NULL&&k<i-1){		pre=pre->next;		k=k+1;	}	if(Pre->next==NULL||i<1){		printf("删除位置不合法");		return ERROR; 	}	s=pre->next;	pre->next=s->next;	*e=s->data;	free(s);	return OK:}//线性表的链式存储typedef int ElemType;//单链表存储结构的描述typedef struct Node//结点类型定义 {	ElemType data;	struct Node* next; } Node,*LinkList;//初始化单链表 InitList(LinkList *L){	/*    L是单链表的头指针,它指向表中第一个结点,(对于带头结点的单链表,则指向单链表的头结点)  	      L=NULL,单链表为空,长度为0 (对于带头结点的单链表,L->next=NUll) 		 有头结点 L是指向单链表的头结点的指针(指针是地址),用来接受头指针变量的地址 	    *L头指针变量(存储值为地址的变量),在主程序中用来初始化单链表 	*/	*L=(LinkList)malloc(sizeof(Node));//建立头结点	(*L)->next=NUll;//建立空的单链表L }

 

上一篇:数据结构之栈与队列
下一篇:java一些基本程序

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月06日 04时43分20秒