王道数据结构--带头结点的单链表实现(可直接运行)

#include
#include 

typedef struct LNode{
	int data;
	struct LNode *next; 
}LNode,*LinkList;
//初始化
bool InitList(LinkList &L){
	L=(LNode*)malloc(sizeof(LNode));
	L->next=NULL;
	return true;
}
//求表长
int Length(LinkList L){
	int len = 0;
	LNode *p=L;
	while(p->next!=NULL){
		p=p->next;
		len++;
	}
	return len;
} 
//按序号查找结点
LNode *GetELem(LinkList L,int i){
	LNode *p=L;
	int j=0;
	while(p!=NULL&&jnext;j++;
	}
	return p;
} 
// 按值查找
LNode *LocateElem(LinkList L,int e){
	LNode *p=L->next;
	while(p!=NULL&&p->data!=e){
		p=p->next;
	}
	return p;
} 
// 插入结点
bool ListInsert(LinkList &L,int i,int e){
	LNode *p=L;
 	int j=0;
 	while(p!=NULL&&jnext;
 		j++;
	 }
	 if(p==NULL) {
	 	return false;
	 }
	  LNode	*s=(LNode*)malloc(sizeof(LNode));
	  s->data=e;
	  s->next=p->next;
	  p->next=s;
	  return true;
} 
 //删除结点
 bool ListDelete(LinkList &L,int i,int &e){
 	LNode *p=L;
 	int j=0;
 	while(p->next!=NULL&&jnext;
 		j++;
	 }
	 if(p->next==NULL||j>i-1){  //j>i-1没有存在的必要 
	 	return false;
	 }
	 LNode *q=p->next;  //q指向被删除结点
	 e=q->data;
	 p->next=q->next; 
	 free(q);
	 return true;
 }
 //头插法建立
 LinkList List_HeadInsert(LinkList &L){
 	LNode *s;int x;
 	L=(LNode*)malloc(sizeof(LNode));
 	L->next=NULL;
 	scanf("%d",&x);
 	while(x!=9999){
 		s=(LNode*)malloc(sizeof(LNode));
 		s->data=x;
 		s->next=L->next;
 		L->next=s;
 		scanf("%d",&x);
	 }
	 return L;
 } 
 //尾插法建立 
 LinkList List_TailInsert(LinkList &L) {
   L=(LNode*)malloc(sizeof(LNode));
 	LNode *s,*r=L;int x; //*r为尾指针
   scanf("%d",&x);
 
 	while(x!=9999){
 		s=(LNode*)malloc(sizeof(LNode));
 		s->data=x;
 		r->next=s;
		 r=s;
		 scanf("%d",&x); 
	 }
	 r->next=NULL;
	 return L;
 }
  
 //输出
 void PrintList(LinkList L){
 	LNode* p=L->next;
 	while(p!=NULL){
 		printf("%d ",p->data);
 		p=p->next;
	 }
	 printf("\n");
 }  
int main(){
	LinkList L;
	InitList(L);
//	List_HeadInsert(L);
    List_TailInsert(L);
    	PrintList(L);
    int e;
    ListDelete(L,2,e);
    printf("e=%d\n",e);
	PrintList(L);
	ListInsert(L,2,7);
	PrintList(L);
	int k=GetELem(L,3)->data;
	printf("k=%d\n",k);
	int m=LocateElem(L,4)->data;
	printf("m=%d",m);
	return 0;
} 

你可能感兴趣的:(王道数据结构,数据结构)