单链表的基本操作----《数据结构》

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

typedef int ElemType;

typedef struct Node{
	ElemType data;
	struct Node *next; 
}Node,*LinkedList;

LinkedList Creatlist(LinkedList head){
	int i,d;
	LinkedList p,q;
	p = head;
	printf("请输入链表元素,输入为404时停止输入 :");   
	while(1) {
		scanf("%d",&d);
		if(d!=404) { 
		q = (LinkedList)malloc(sizeof(Node));
		q->data = d; 
		q->next = NULL;
		p->next = q;
		p = q;}
		else
		 return false; 
	}
	return head;
}

void PutList(LinkedList head,LinkedList  p){
	p = head->next;
	while(p){
		printf("%d",p->data);
		p=p->next;
	}
}

void InsertList(LinkedList head){
	if(!head){
		printf("链表不存在");
		return ;
	}
	int c = 0;
	LinkedList p = head;
	while(p!=NULL){
		c++;
		if(c==5){
			LinkedList temp = (Node*)malloc(sizeof(Node));
			temp->data =999;
			temp->next = p->next;
			p->next = temp;
			break;
		}
		p= p->next;
		}
	}
//删除第五个元素	
void Del(LinkedList head){ 
	LinkedList p;
	int c=0;
	if(!head){
		printf("链表不存在");
		return ;
	}
	p = head;
	while(p){
		c++;
		if(c==5){
			p->next = p->next->next;
		}
		p= p->next;
	}
	
}

//删除指定区域的元素
void DelList(LinkedList head,int mink,int maxk){
	
	LinkedList p,q,temp;
	if(!head){
		printf("链表不存在");
		return; 
	}
	temp = head; 
	p = head; 
	while(p->next){ 
		if(p->next->data>=mink&&p->next->data<=maxk){
			q = p->next; 
			p->next = q->next; 
			free(q); 
		}
		else
		p = p->next; 
	} 
	
	 
	


} 

int main(){
	LinkedList head,p;
	head = (LinkedList)malloc(sizeof(Node));
	head->next = NULL;
	int n,i,mink,maxk;
	Creatlist(head); 
	printf("输入相应编号,执行操作\n1.遍历单链表\n2.在单链表中插入元素\n3.删除单链表中的元素\n4.删除指定区域的元素;");
	scanf("%d",&i);
	switch(i){
		case 1:
			PutList(head,p);
			break;
		case 2:
			InsertList(head);
			p = head->next;
			while(p){
				printf("%d",p->data);
				p=p->next;
			}
		
			break;
		case 3:
			Del(head);
			p = head->next;
			while(p){
				printf("%d",p->data);
				p=p->next;
			}
			break;
		case 4: printf("请输入删除的范围");
			scanf("%d %d",&mink,&maxk);
			DelList(head,mink,maxk);
			//printf("1===") ;
			p= head->next; 
			while(p){
				printf("%d",p->data);
				p=p->next;
			}
			break; 
	}
	return 0; 
} 

 

posted @ 2017-11-05 20:01  自由的背包  阅读(285)  评论(0编辑  收藏  举报