链表实现顺序储存(c语言)

  • Post author:
  • Post category:其他


1.插入删除第一个位置总是有问题,但不知道怎么解决。。。。

2.指针好香啊

#include <stdio.h>
#include <stdlib.h>
//链表中节点的结构
typedef struct Linklist{
	int  elem;
	struct Linklist *next;
}linklist;
//初始化链表
linklist* init(){
	linklist *p=NULL;//创建头指针 
	linklist * temp=(linklist*)malloc(sizeof(linklist));//创建头节点 
	temp->elem=1;
	temp->next=NULL;
	p=temp;
	/*for(int i=2;i<5;i++){
		linklist * a=(linklist*)malloc(sizeof(linklist));
		a->elem=i;
		a->next=NULL;
		temp->next=a;
		temp=temp->next;
	}*/ 
	return p;
} 
//遍历链表
void tra(linklist *p){
	linklist *temp=p;
	while(temp){
		printf("%d  ", temp->elem);
		temp=temp->next;
	}
	printf("\n");
} 
//在pos位置插入value
linklist* insert(linklist *p,int pos,int value){
	linklist *temp=p;
	for(int i=1;i<pos-1;i++){
		if(temp==NULL){
			printf("insert wrong position\n");
			return NULL;
	}
		temp=temp->next;
	}
	

		linklist *a=(linklist*)malloc(sizeof(linklist));
		a->elem=value;
		a->next=temp->next;
		temp->next=a;
		return p;

} 
//删除pos位置的元素
linklist* del(linklist *p,int pos){
	linklist *temp=p;
	//找到位置 
	for(int i=1;i<pos-1;i++){
		if(temp==NULL){
			printf("delete wrong position\n");
			return NULL;
		}
		temp=temp->next;
	}
	//储存被删除的节点 
	linklist *a=temp->next;
	//改动指向 
	temp->next=temp->next->next;
	//回收 
	free(a);
	return p;
} 
//查找元素
int find_by_value(linklist *p,int value){
	linklist *t=p;
	int i=1;
	while(p){
		if(p->elem==value){
			printf("position in %d\n",i);
			return i;
		}
		p=p->next;
		i++;
	}
	printf("link does not have this element\n");
	return -1;
} 
int main(){
	linklist *p=init();
	tra(p);
	insert(p,1,5);
	insert(p,1,4);
	insert(p,1,3);
	tra(p);
	del(p,2);
	tra(p);
	find_by_value(p,5);
	return 0;
}



版权声明:本文为jiangjun_feng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。