线性表链式存储结构代码记录

线性表链式存储结构代码记录

#include<stdio.h>
#include<stdlib.h>
typedef int Elemtype;
typedef struct 
{
	Elemtype data;
	struct Node *next;
}Node;
typedef  Node *Linklist;

//操作函数_取数据 (按位置取)
Elemtype GetLinklist(Linklist L,int i)
{
	Linklist p;//声明一个指针做操作,作移动使用 
	int n,j=1;
	p=L->next;
	while(p&&j<i)
		{
			p=p->next;
			j++;
		}
	if(!p) return -1; 
	return p->data;
	
}

//插入节点 (头插法)
int Nodeinsert(Linklist L,Linklist  n)
{
	n->next=L->next;
	L->next=n;
	return 1;
}


//插入数据元素(头插法) 
int Datainsert(Linklist L,Elemtype add)
{
	Linklist n;//处理为新结点 
	n=(Linklist)malloc(sizeof(Node));
	n->next=NULL;
	n->data=add;
	Nodeinsert (L,n);//将准备好的结点插入 
	return 1;
} 

//删除节点 
int NodeDelete(Linklist L,int position)
{	
	int n;
	Linklist a,b;
	a=L;
	n=1;
	while(a->next&&n<position)//找前一个结点 
		{
			n++;
			a=a->next;	
		}
	if(!(a->next)||n>position)	return 0;//结点不存在
	b=a->next;//b指向要删除的位置
	a->next=b->next;//踢出结点 
	free(b); //释放结点 
	return 	1;
}
 
 
//测试 
void main ()
{
	int n; 
//测试插入元素生成一个链表存 1-10
	Linklist L,p;//L做头结点,p做临时使用
	L=(Linklist)malloc(sizeof(Node));
	L->next=NULL;
	for(n=10;n>0;n--)
		Datainsert(L,n);


//测试删除节点(删除前五个元素)
	for(n=1;n<=5;n++)
		NodeDelete(L,1); 
	p=L->next;

	while(p)
		{
			n++;
			printf("%d	",p->data);
			p=p->next;
		}

 
} 
posted @ 2020-05-05 22:23  selfW  阅读(14)  评论(0编辑  收藏  举报