部分链表知识?
链表中数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。
链表操作:
我们将介绍几种简单的链表操作:
插入:头插.尾插.指定位置插入.
删除:头删.尾删.指定位置删除.
冒泡排序
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;
}
}