zoukankan      html  css  js  c++  java
  • 链表基本操作

    所有结构体定义均为

    struct node{
    	int data;数据域
    	struct node *text;指针域
    };   
    

    单链表的构造方法

    一·头插法(带头节点)

    struct node *tc(){
    	struct node *p,*head;
    	head=(struct node *)malloc(sizeof(struct node));
    	head->text=NULL;//构造一个头节点 
    	int n=0,temp;
    	while(1){
    	scanf("%d",&temp);
    	if(temp==0) break;
    	p=(struct node *)malloc(sizeof(struct node));
    	p->data=temp;
    	p->text=head->text;//将p插在头节点后面 
    	head->text=p;
    }
    

    二.尾插法(不带头节点)

    struct node *wc(){
    	struct node *head,*p,*p1;
    	int n=0,temp;
    	scanf("%d",&temp);
    	while(temp!=0){
    		p=(struct node *)malloc(sizeof(struct node));
    		p->data=temp;
    		n++;
    		if(n==1) head=p1=p;
    		else{
    			p1->text=p;
    			p1=p;
    		}
    		scanf("%d",&temp);
    	}
    	if(head!=NULL) p->text=NULL;
    	return head;
    }  
    
    

    单链表查找

    查找某个值

    void chazhao(struct node *head){
    	int t;
    	printf("输入要找的数字"); 
    	scanf("%d",&t);
    	getchar();
    	struct node *p=head;
    	while(p){
    		if(p->node==t){
    			printf("存在
    ");
    			return ;
    		}
    		p=p->next;
    	}
    	printf("不存在
    ");
    }  
    

    查找第k个元素

    与上面类似,加一个int的变量i来判断是第几个元素,若存在i==k输入并退出

    删除等于x的结点

    struct node *sc(struct node *head,int x){
    	struct node *p=head,*p1;
    	while(p->data!=x&& p){
    	p1=p;
    	p=p->next;	
    	} 
    	if(p->data==x){
    		if(p==head){
    			head=head->next;
    			free(p);
    		}
    		else{
    			p1->next=p->next;
    			free(p);
    		}
    	}
    	return head;
    }
    

    单链表的插入

    单链表逆置

    struct node *Reverse( struct node *head ){
    	struct node  *p=head,*p1,*s=NULL; 
        while(p){
        p1=p;
        p=p->text;
        p1->text=s;
        s=p1;
        }
        return s;
    }  
    

    单链表的排序(自己想的骚方法,效率低)

    struct node *paixu(struct node *head,int n){
    	struct node *p=head;
    	int i,j,t,a[n];
    	for(i=0;i<n;i++){
    	 a[i]=p->node;	
    	 p=p->next;
    	}
    	for(i=n-1;i>0;i--){
    		for(j=0;j<i;j++){
    			if(a[j]>a[j+1]){
    				t=a[j+1];
    				a[j+1]=a[j];
    				a[j]=t;
    			}
    		}
    	}
    	p=head;
    	for(i=0;i<n;i++){
    		p->node=a[i];
    		p=p->next;
    	}
    	return head;
    }  
    
  • 相关阅读:
    右建删除.svn
    Oracle 初始化 SEQUENCE附代码
    IE8支付宝密码控件
    JavaScript怎样读取Gridview控件的单元格的值
    IIS7 发布WCF
    C#创建后台服务注意事项
    Sqlserver中传递列参数需要注意的一个小细节
    JavaScript中针对中文参数的转编码
    VS2010里面调试后台服务
    href=#与href=javascriptvoid(0)的区别
  • 原文地址:https://www.cnblogs.com/wjc6765/p/15082892.html
Copyright © 2011-2022 走看看