C语言链表例程

C语言链表结构

#include<stdio.h>  //定义头文件
#include<stdlib.h>
	typedef struct student  // 定义结构体
	{
		int score;          //定义数据
		struct student *next;  //定义结构体指针
		
	}LinkList;       

上述函数是为了定义结构体

 LinkList *creat(int n)	
	{	
		LinkList *head,*node,*end;     //定义头指针,普通指针
		head=(LinkList*)malloc(sizeof(LinkList));     //为头指针添加空间
		end=head;                                  //头尾相连
		for(int i=0;i<n;i++)                      //定义节点
		{
			node=(LinkList*)malloc(sizeof(LinkList));   //创造空间
			scanf("%d",&node->score);                  //输入数据
		end->next=node;                             //  尾指针的指针指向创造的空间
		end=node;                                   //将node的结构体数据赋给end
		}
		end->next=NULL;                         //结束以后将尾指针指向空白
		return head;                          //返回头指针
	}
```上述函数是为了创建链表

```c
void change(LinkList *list,int n)
{
	LinkList *t=list;     
	int i=0;
	while(i<n&&t!=NULL)
	{
		t=t->next;
		i++;
	}
	if(t!=NULL)
	{
		puts("输入要修改的值");
		scanf("%d",&t->score); 
	}
	else
	{
		puts("节点不存在"); 
	}
}
```上述函数是修改链表。


void  delet(LinkList *list,int n)
{
	LinkList *t=list;    //,*in;
	int i=0;
	while(i<n&&t!=NULL)
	{
		in=t;
		t=t->next;
		i++;		
	}
	if(t!=NULL)
	{
		in->next=t->next;
		free(t);
	}
	else
	{
		puts("节点不存在"); 
	}
	
}
```上述函数删除链表


void insert(LinkList *list,int n)
{
	LinkList *t=list,*in;
	int i=0;
	while(i<n&&t!=NULL)
	{
		t=t->next;
		i++;
	}
	if (t != NULL) {
		in = (LinkList*)malloc(sizeof(LinkList));
		puts("输入要插入的值");
		scanf("%d", &in->score);
		in->next = t->next;//填充in节点的指针域,也就是说把in的指针域指向t的下一个节点
		t->next = in;//填充t节点的指针域,把t的指针域重新指向in
	}
	else {
		puts("节点不存在");
	}	
}	
插入链表数据
{
	
	LinkList *h=list;
	
	while (h->next != NULL) {
		h = h->next;
		printf("%d  ", h->score);
	}
 
	}	
输出数据

**

总代码

**

#include<stdio.h>
#include<stdlib.h>
	typedef struct student
	{
		int score;
		struct student *next;
		
	}LinkList;
	
	
 LinkList *creat(int n)	
	{	
		LinkList *head,*node,*end;
		head=(LinkList*)malloc(sizeof(LinkList));
		//scanf("%d",&node->score);
	//	end->next=node;
		end=head; 
		for(int i=0;i<n;i++)
		{
			node=(LinkList*)malloc(sizeof(LinkList));
			scanf("%d",&node->score);
		end->next=node;
		end=node; 
		}
		end->next=NULL;
		return head;
	}
	
void change(LinkList *list,int n)
{
	LinkList *t=list;
	int i=0;
	while(i<n&&t!=NULL)
	{
		t=t->next;
		i++;
	}
	if(t!=NULL)
	{
		puts("输入要修改的值");
		scanf("%d",&t->score); 
	}
	else
	{
		puts("节点不存在"); 
	}
}
void  delet(LinkList *list,int n)
{
	LinkList *t=list,*in;
	int i=0;
	while(i<n&&t!=NULL)
	{
		in=t;
		t=t->next;
		i++;		
	}
	if(t!=NULL)
	{
		in->next=t->next;
		free(t);
	}
	else
	{
		puts("节点不存在"); 
	}
	
}	
void insert(LinkList *list,int n)
{
	LinkList *t=list,*in;
	int i=0;
	while(i<n&&t!=NULL)
	{
		t=t->next;
		i++;
	}
	if (t != NULL) {
		in = (LinkList*)malloc(sizeof(LinkList));
		puts("输入要插入的值");
		scanf("%d", &in->score);
		in->next = t->next;//填充in节点的指针域,也就是说把in的指针域指向t的下一个节点
		t->next = in;//填充t节点的指针域,把t的指针域重新指向in
	}
	else {
		puts("节点不存在");
	}	
}	

void put(LinkList *list)	
{
	
	LinkList *h=list;
	
	while (h->next != NULL) {
		h = h->next;
		printf("%d  ", h->score);
	}
 
	}	
int main()
{
	
		 LinkList *head,*node,*end;
        	int n,i;
        	printf("请输入节点数"); 
        scanf("%d",&n);
       	 printf("请输入数字"); 
         head=creat(n);
         put(head);
        // printf("  结束   "); 
       printf("是否修改数据是输入1 否输入0   \n");
       scanf("%d",&i);
	   if(i==1)
	   {
	   	printf("请输入节点数");
	   	scanf("%d",&n);
	   	change(head,n);
	   	printf("结束");
	   	 put(head);
		} 
       printf("是否删除数据 是输入1 否输入0\n");
       scanf("%d",&i);
       if(i==1)
       {
       	printf("请输入节点数");
	   	scanf("%d",&n);
        delet(head,n);
	    printf("结束");
	   	 put(head);
     }
     
     printf("是否插入数据 是输入1 否输入0\n");
       scanf("%d",&i);
       if(i==1)
       {
       	printf("请输入节点数");
	   	scanf("%d",&n);
        insert(head,n);
	    printf("结束");
	   	 put(head);
     }

		 
 } 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值