連結串列入門與插入連結串列

千年鹹魚發表於2020-11-12

連結串列為資料與指標相連,便於插入資料
缺點在於查詢比較費時,需要遍歷整個連結串列

#include<stdio.h>
#include<stdlib.h>

//建立結構體表示連結串列的結點型別
struct node
{
	int data;
	struct node *next;
};

int main()
{
	struct node *head,*p,*q,*t;
	int i,n,a;
	scanf("%d",&n);
	head=NULL;//頭指標初始化為空
//其中->表示結構體指標運算子,用來訪問結構體內部的成員
	for(i=1;1<=n;i++)//迴圈讀入n個數
	{
		scanf("%d",&a);
		p=(struct node *)malloc(sizeof(struct node));
		//動態申請一個空間,用來存放一個節點,並用臨時指標p指向這個節點
		p->data=a;//將資料存入當前節點
		p->next=NULL;//設定下一個節點為空

		if(head=NULL)
			head=p;//如果這是第一個建立的節點,則將頭指標指向他
		else
			q->next=p;//如果不是第一個節點,則將上一個後繼指標指向他

		q=p;//指標q也指向當前節點
	
	}

	scanf("%d",&a);//讀入待插入的數
	t=head;//從連結串列頭部開始遍歷
	while(t!=NULL)//到達尾部停止迴圈
	{
		if(t->next==NULL||t->next->data>a)
		//當前遍歷的節點是最後一個或下一個節點大於待插入的數時插入
		{
			p=(struct node *)malloc(sizeof(struct node));//存放新節點
			p->data=a;
			p->next=t->next;
			t->next=p;
			break;
		}
		t=t->next;
	}
	
	t=head;
	while(t!=NULL)
	{
		printf("%d ",t->data);
		t=t->next;
	}

	getchar();getchar();
	return 0;
}

相關文章