源码

链表

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct Node
{    	
	int data;//val position    
	struct Node *pNext;//zhi zhen yv
}NODE, *PNODE;//NODE == sturct Node  PNODE == struct Node *
//han shu definePNODE 

create_list(void);//自定义一个链表
void traverse_list(PNODE pHead);//输出链表内的值
bool is_empty(PNODE pHead);//判断链表是否为空
int length_list(PNODE); //查看链表长度
bool insert_list(PNODE, int ,int);//增加一个节点
bool delete_list(PNODE, int ,int *);//删除一个节点
void sort_list(PNODE);//给链表排序

int main(void)
{    
	PNODE pHead = NULL;//strut Node * pHead = NULL;

	pHead = create_list();//set up a list,
    	pHead = the first position of list    traverse_list(pHead);
    	    
   	 /*if (is_empty(pHead))   
    	{        printf("the list is empty.\n");    }    
	    else    
    	{       printf("the list is not empty.\n");    }
    	*/
    	
    	int len = length_list(pHead);
    	    
    	printf("the list length = %d\n",len);
   	 sort_list(pHead);    
    	traverse_list(pHead);
}
    	
PNODE create_list(void)
{    	int len;    
	int i;    
	int val;
	
    	PNODE pHead =  (PNODE)malloc(sizeof(NODE));//malloc a have no shujv first position.     
    	PNODE pTail = pHead;
    	
    	if (NULL == pHead)    
    	{        
    		printf("malloc lose ,over");        
    		exit(-1);    
    	}
    	
    	printf("please input you need make lists number");    
    	scanf("%d", &len);
    	
    	for (i=0; i<len ;i++)    
    	{       
    	 	printf("Number %d val : ",i+1);        
    	 	scanf("%d",&val);
  
        	PNODE pNew =  (PNODE)malloc(sizeof(NODE));        
        	if (NULL == pNew)        
        	{            
        		printf("malloc lose ,over");           
        		exit(-1);        
        	}        
        	pNew->data = val;        
        	pTail->pNext = pNew;        
        	pNew->pNext = NULL;        
        	pTail = pNew;

    	}
    	
    	return pHead;
}

void traverse_list(PNODE pHead)
{    	PNODE p = pHead->pNext;

    	while (NULL != p)    
    	{        
    	printf("%d   ",p->data);        
    	p = p->pNext;    
    	}
    	    
    	printf("\n")}

bool is_empty(PNODE pHead)
{    
	if (pHead->pNext == NULL)    
	{        return true;    }    
	else         
		return pHead;
}

int length_list(PNODE pHead)
{    
	PNODE p = pHead->pNext;    
	int len = 0;
	
    	while (NULL != p)    
    	{        
    		++len;        
    		p = p->pNext;    
    	}    
    	
	return len;
} 

void sort_list(PNODE pHead)
{    	PNODE p, q;    
	int i, j, t;    
	int len = length_list(pHead);
	
    	for (i = 0,p = pHead->pNext; i<len-1 ;++i,p = p->pNext)    
    	{        
    		for(j=i+1,q=p->pNext; j<len; ++j,q=q->pNext)        
    		{            
    			if (p->data > q->data)           
    			{                
    				t = p->data; //t = a[i]                
    				p->data = q->data; // a[i] = a[j]                
    				q->data = t;// a[j] = t            
    			}        
    		}   
    	}
}

//在pHead所指向链表的第pos个节点的前面插入一个新的节点,该结点的值是val
bool insert_list(PNODE pHead, int pos, int val)
{    
	int i = 0;    
	PNODE p = pHead;
	
    	while (NULL != p && i<pos-1)    
    	{        
    		p = p->pNext;        
    		++i;    
    	}
    	
    	if (i>pos-1 || NULL==p)    
    	{        return false;    }
    	PNODE pNew = (PNODE)malloc(sizeof(NODE));    
    	if (NULL == pNew)    
    	{        printf("动态分配内存失败!\n");        
    		exit(-1);    
    	}    
    	
    	pNew->data = val;    
    	PNODE q = p->pNext;    
    	p->pNext = pNew;    
    	pNew->pNext = q;
    	
  	return true;
}

bool delete_list(PNODE pHead, int pos, int * pVal)
{    
	int i = 0;    
	PNODE p = pHead;
	
    	while (NULL != p->pNext && i<pos-1)    
    	{        p = p->pNext;        
    		++i;    
    	}
    	        
    	if (i>pos-1 || NULL==p->pNext)    
    	{    return false;    }
    	
    	PNODE q = p->pNext;    
    	* pVal = q->data;
 	p->pNext = p->pNext->pNext;    
 	free(q);//    q = NULL;
 	
    	return true;
}

郝斌数据结构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值