单链表部分操作

来源:互联网 发布:免费数据接口 编辑:程序博客网 时间:2024/05/17 02:27

部分链表知识?


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


链表操作:

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

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

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

冒泡排序

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;elseprintf("顺序表已满!!!");}

<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("顺序表为空!!!");elsepSeq->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;      }  }  


0 0
原创粉丝点击