(C语言)初识链表

1利用链表打印1-10的元素

#include<stdio.h>
//定义一个结构体变量
//既存放一个变量,又把首个节点的地址存入,方便之后通过head的地址找其他变量的地址
typedef struct  node
{
	int a;
	struct node* next;
};
int main()
{
	struct node head, *p, *q;
	int i, n;
	q = &head;//q取首元素地址
	for (i = 1; i <= 10; i++)//设置循环
	{
        malloc函数是c语言的函数,指申请一个你需要的变量大小的空间,单位是字节
		p = malloc(sizeof(struct node));//空间地址是随机的
		p->a = i;//将i的值存入p的a元素里
		q->next = p;//将p的地址存入q的next元素里
		q = p;再将p的地址覆盖在q上
	}
	p->next = NULL;//设置循环停止条件
	p = head.next;
	while (p != NULL)用while循环打印
	{
		printf("%d ", p->a);
		p = p->next;
	}
	return 0;
}

2,将链表的第二位插入一个0;

#include<stdio.h>
struct  node
{
	int a;
	node* next;
};
int main ()
{
	node head,*p,*q;
	int i,n;
	q=&head;
	for(i=1;i<=10;i++)
	{
		p=new node;
		p->a=i;
		q->next=p;
		q=p;
	}
	p->next=NULL;
	n=5;
	p=&head;
	for(i=0;i<n;i++) p=p->next;
	q=new node;
	q->a=0;
	q->next=p->next;
	p->next=q;
	p=head.next;
	while(p!=NULL)
    {
      printf("%d ",p->a);
	  q=p->next;
	  delete p;
	  p=q;
    }
	return 0;
}

小编是在DEV上写的,因为好像vs中new和delete要c++函数。

效果

 

3删除第二个元素

struct  node
{
	int a;
	node* next;
};
int main ()
{
	node head,*p,*q;
	int i,n;
	q=&head;
	for(i=1;i<=10;i++)
	{
		p=new node;
		p->a=i;
		q->next=p;
		q=p;
	}
	p->next=NULL;
	n=2;
	p=&head;
	for(i=1;i<n;i++) p=p->next;
	q=p->next;
	p->next=q->next;
	p=head.next;
	delete q;
	while(p!=NULL)
    {
      printf("%d ",p->a);
	  q=p->next;
	  delete p;
	  p=q;
    }
	return 0;
}

 输出效果

猜你喜欢

转载自blog.csdn.net/qq_62662919/article/details/121763903