C语言写链表,好久没写数据结构了,花十分钟写个链表

2 篇文章 0 订阅

/*#!/bin/bash

#shell编程实现冒泡排序
read -p "please input enement:" -t 1
read -a num 

echo num:$num 

array=(12 121 321 41 521)
echo array
for(i=0;i<${#array[@]};i++)
do
		for(j=0;j<${#array[@]};j++)
		do
				if [ ${array[$j]} -gt ${array[$i]} ]
				then
						temp=${array[$j]}
						array[$j]=${array[$i]}
						array[$i]=$temp
				if
		done
		echo ${array[$i]}
done
echo end
echo "${#array[*]}"
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct student
{
	char *name;
	int age;
	int chinese;
	int math;
	int english;
	
};

typedef struct Node
{
	int data;
	struct Node *next;	
}PNode;

#define NODE_LEN sizeof(PNode)
PNode * Create_Head_Node(void)
{
	PNode *head;
	head = (PNode *)malloc(NODE_LEN);
	if(head == NULL)
	{
		return NULL;
	}
	head->data = 0;
	head->next = NULL;
	return head;
}
int Insert_Node(PNode *head,int data)
{
	PNode *node;	
		
	if(head == NULL)
		return -1;
			
	node = (PNode *)malloc(NODE_LEN);
	if(head == NULL)
	{
		return -2;
	}	
		
	node->data = data;
	node->next = head->next;
	head->next = node;
		
	return 0;	
}
int Delete_Node(PNode *head,int data)
{
	PNode *temp,*temphead;
	temp = head->next;
	temphead = head;
		
	 if(head == NULL)
	{
		return -1;
	}
	while(1)
	{
		if(temp == NULL)
		{
			return -2;
		}
		if (temp->data == data) 
		{
			temphead->next = temp->next;
			free(temp);
			return 0;
		}
		temphead = temp;
		temp = temp->next;
	}
	return 0;
}
int Chamge_Node(PNode *head,int data,int changedata)
{
	PNode *temp;
	temp = head->next;

	while(1)
	{
		if(temp == NULL)
		{
			return -1;
		}
		if(temp->data == data)
		{
			temp->data = changedata;
			return 0;
		}
		temp = temp->next;				
	}
	return 0;
}
PNode *Find_Node(PNode *head,int data)
{
	PNode *node;
	node = head->next;

	while(1)
	{
		if(node == NULL)
		{
			return NULL;
		}
		if (node->data == data) 
		{
			return node;
		}
		node = node->next;
	}
	return NULL;
}
void Printf_Node(PNode *head)
{
	PNode *temp;
	temp = head->next;
	while(1)
	{
		if(temp == NULL)
		{
			return ;
		}
		printf("Node data:%d\n",temp->data);
		temp = temp->next;
	}
}

int GetNum_Node(PNode *head)
{
	int num = 0;
	PNode *temp;
	temp = head;
	while(1)
	{
		temp = temp->next;
		if (head == NULL) 
		{
			return num;
		}
		num++;			
	}
	return 0;	
}

void Sort_Node(PNode *head)
{
	PNode *first,*second,*temp;
	first = head->next;
	
	temp = (PNode*)malloc(NODE_LEN);
	temp->next = NULL;
	
	while(1)
	{			
		second = first->next;
		if(second == NULL)
		{
			return;
		}
		while(1)
		{
			if((first->data) > (second->data))
			{
				temp->data = first->data;						
				first->data = second->data;
				second->data = temp->data;
			}
			second = second->next;
			if(second == NULL)
			{
				break;
			}
		}
		first = first->next;
	}
	
}

int main()
{
	PNode *head,*find;	
	
	head = Create_Head_Node();
	
	printf("增加节点\n");
	Insert_Node(head,1);
	Insert_Node(head,2);
	Insert_Node(head,3);
	Insert_Node(head,4);
	Insert_Node(head,5);
	Insert_Node(head,6);
	Printf_Node(head);
	
	printf("删除节点\n");
	Delete_Node(head,3);
	Printf_Node(head);
	
	printf("修改节点\n");
	Chamge_Node(head,5,7);
	Printf_Node(head);
	
	printf("查询节点\n");
	find = Find_Node(head,7);
	printf("find Node: %d\n",find->data);
	
	Chamge_Node(head,2,9);
	
	printf("排序节点\n");
	Printf_Node(head);
	printf("\n");
	Sort_Node(head);
	Printf_Node(head);
	return 0;
	
}


			
			
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值