单链表部分操作

这篇博客介绍了链表的基本概念,强调了链表在动态管理内存方面的优势,并探讨了链表的几种常见操作,包括头插、尾插、指定位置插入、头删、尾删和指定位置删除。此外,还详细说明了如何对链表进行冒泡排序。
摘要由CSDN通过智能技术生成

部分链表知识?


链表中数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。


链表操作:

      我们将介绍几种简单的链表操作:

插入:头插.尾插.指定位置插入.

删除:头删.尾删.指定位置删除.

冒泡排序

1.链表的建立:

<span style="font-size:14px;">#ifndef _SEQLIST_D_H_
#define _SEQLIST_D_H_
#define MAX 100
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<assert.h>
};
typedef int DataType;
typedef struct SeqList
{
     DataType Data[MAX];
	 int sz;         //某一时刻顺序表中元素的个数
}SeqList,*pSeqList</span>

2.链表中插入一个节点


<1.>头插(在头结点之后插入一个结点)

void PushFrontpSeqList pSeq,DataType x)
{
	int i = pSeq->sz-1;
	while(pSeq->sz==MAX)
	{
		printf("顺序表已满,不能插入元素!!!");
	}
	for(i=pSeq->sz -1;i>0;i--)
	{
		pSeq->Data[i+1] = pSeq->Data[i];
	}
	pSeq->Data [0] = x;
	pSeq->sz++;
}

<2.>尾插(在尾部再插入一个结点

void PushBack(pSeqList pSeq,DataType x)
{
	if((pSeq->sz)<MAX)
		pSeq->Data[pSeq->sz++]=x;
	else
		printf("顺序表已满!!!");
}

<3.>指定位置插入(先找到指定位置,在进行插入)

void Insert(pSeqList pSeq,int pos,DataType x)//在指定位置插入一个元素
{
	int i = pSeq->sz;
	pSeq->sz++;
	for(i=pSeq->sz-1;i>pos;i++)
	{
		pSeq->Data[i+1]=pSeq->Data[i];
	}
	pSeq->Data[pos] = x;


3..链表中删除一个节点

《以下图依次为头删,尾删和指定位置删除》

              


<1.>头删(从头部删除一个节点)

void PopFront(pSeqList pSeq)
{ 
	int i = 0;
	while(pSeq->sz==0)
	{
		printf("顺序表为空!!");
	}
	for(i=0;i<pSeq->sz;i++)
	{
		pSeq->Data[i]=pSeq->Data[i+1];
	}
	pSeq->sz--;
}

<2.>尾删

void PopBack(pSeqList pSeq )
{
	if(pSeq->sz==0)
		printf("顺序表为空!!!");
	else
		pSeq->sz--;
}

<3.>指定位置删除(先找到指定位置再进行删除)

void Remove(pSeqList pSeq,DataType x)//指定删除一个元素
{
	int i=0;
	int j=0;
	for(i=0;i<pSeq->sz-1;i++)
	{
		if(pSeq->Data[i]==x)
		{
			j=i;
			for(j=i;j<pSeq->sz-1;j++)
			{
				pSeq->Data[i]=pSeq->Data[i+1];
			}
		}
	}
	pSeq->sz--;

4.冒泡排序

void BottleSort(pLinkList pList)  
{  
    assert(pList);  
    if (NULL == pList->pHead || NULL == pList -> pHead->next )  
    {  
        printf("linklist is empty or linklist has one element.\n");  
        return;  
    }  
    pLinkNode front = pList->pHead;  
    pLinkNode tail = NULL;  
    while (front != tail)  
    {  
        while (front->next != tail)  
        {  
            if (front->data > front->next->data)  
            {  
                DataType tmp = front->data;  
                front->data = front->next->data;  
                front->next->data = tmp;  
            }  
            front = front->next;  
        }  
        tail = front;  
        front = pList->pHead;  
    }  
}  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值