溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)中鏈表的接口函數(shù)怎么使用

發(fā)布時(shí)間:2022-10-17 15:35:38 來(lái)源:億速云 閱讀:114 作者:iii 欄目:編程語(yǔ)言

這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)中鏈表的接口函數(shù)怎么使用的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)中鏈表的接口函數(shù)怎么使用文章都會(huì)有所收獲,下面我們一起來(lái)看看吧。

slist.h文件

#pragma once
#include<stdio.h>
#include<stdlib.h>
//一個(gè)一個(gè)按需向堆上申請(qǐng)內(nèi)存
typedef int SListDateType;
//鏈?zhǔn)浇Y(jié)構(gòu)體的名稱重定義為SListNode,這個(gè)SListNode表示一個(gè)結(jié)構(gòu)體
//這個(gè)項(xiàng)目中使用到的這個(gè)結(jié)構(gòu)體的一個(gè)全局變量是SLTNode。
typedef struct SListNode
{
  SListDateType data;
  struct SListNode* next;
}SLTNode;

void SListPrint(SLTNode*phead);//phea表示指向第一個(gè)結(jié)點(diǎn)的頭指針
void PushBack(SLTNode**phead,SListDateType x);//尾插
void PushFront(SLTNode**phead,SListDateType x);//頭插
void PopBack(SLTNode**phead);
void PopFront(SLTNode**phead);

slist.c文件

#include"Slist.h"
#include<stdlib.h>
//鏈?zhǔn)浇Y(jié)構(gòu)體的名稱重定義為SListNode,這個(gè)SListNode表示一個(gè)結(jié)構(gòu)體
//這個(gè)項(xiàng)目中使用到的這個(gè)結(jié)構(gòu)體的一個(gè)全局變量是SLTNode。
void SListPrint(SLTNode*phead)
{
  
  SLTNode* cur=phead;//用一個(gè)表示地址的指針去指向他
  while(cur!=NULL)
  {
    printf("%d ",cur->data);//cur是一個(gè)指向地址的變量,,稱為指針變量
    cur=cur->next;
  
  }
  printf("\n");
}

void PushBack(SLTNode**phead,SListDateType x)//尾插
{
  //如果鏈表為空,沒有尾結(jié)點(diǎn)的話,建一個(gè)newnode
  SLTNode* newnode;
  
  newnode=(SLTNode*)malloc(sizeof(SLTNode));//這三行的意思是創(chuàng)立一個(gè)新的結(jié)點(diǎn),這三行可以專門做成一個(gè)函數(shù)
  newnode->data=x;
  newnode->next=NULL;
  
  //如果鏈表為空,沒有尾結(jié)點(diǎn)的話,建一個(gè)newnode
  if(*phead==NULL)
  {
    *phead=newnode;
  }
  else 
  {
    //找到尾節(jié)點(diǎn)
    SLTNode*tail=*phead;
    while(tail->next!=NULL)
    {
      tail=tail->next;
    }
    tail->next=newnode;
  }
  
}


void PushFront(SLTNode**phead,SListDateType x)//頭插
{
  SLTNode* newnode;
  
  newnode=(SLTNode*)malloc(sizeof(SLTNode));//創(chuàng)立新結(jié)點(diǎn)
  newnode->data=x;
  newnode->next=NULL;

  newnode->next=*phead;
  *phead=newnode;
}

void PopBack(SLTNode**phead)//尾刪
{
  SLTNode*tail;
  SLTNode*prev;
  tail=*phead;
  prev=NULL;
  if(*phead==NULL)
  {
    return;
  }

  while(tail->next!=NULL)
  {
    prev=tail;
    tail=tail->next;
  }
  free(tail);
  tail=NULL;
  prev->next=NULL;

}

void PopFront(SLTNode**phead)//頭刪
{
  
  if(!(*phead))
  {
    return ;
  }
  
  
  else{
  SLTNode*next=(*phead)->next;
  free(*phead);
  *phead=next;
  }
  //else
  //{
  //  tail=*phead;//plist
  //  tail=tail->next;
  //  *phead=tail;
  //  free(tail);
  //} 
}



SLTNode*SListFind(SLTNode*phead,SListDateType x)//查找
{
  SLTNode*cur=phead;
  
  
  while(cur)//遍歷
  {
    if(cur->data==x)
    {
      return cur;
    }
    else
    {
      cur=cur->next;
    }
  }
  return NULL;
}


void SListInsert(SLTNode**phead,SLTNode*pose,SListDateType x)//插入
{


}
void SListErase(SLTNode**phead,SLTNode*pose);//刪除
void SListDestory(SLTNode**phead);//摧毀

test.c函數(shù)

#include<stdio.h>
#include"Slist.h"

//形參的改變不影響實(shí)參
void testslist1()
{
  SLTNode*plist=NULL;//不需要初始化  直接給個(gè)空就可以  //形參的改變不影響實(shí)參
  PushBack(&plist,1);
  PushBack(&plist,2);
  PushBack(&plist,3);
  PushBack(&plist,4);

  SListPrint(plist);

  PushFront(&plist,1);
  PushFront(&plist,2);
  PushFront(&plist,3);
  PushFront(&plist,4);
  SListPrint(plist);

  PopBack(&plist);
  PopBack(&plist);
  PopBack(&plist);
  SListPrint(plist);

  PopFront(&plist);
  
  SListPrint(plist);
}


int main()
{

  testslist1();
  
  return 0;
}

關(guān)于“C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)中鏈表的接口函數(shù)怎么使用”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)中鏈表的接口函數(shù)怎么使用”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI