av手机免费在线观看,国产女人在线视频,国产xxxx免费,捆绑调教一二三区,97影院最新理论片,色之久久综合,国产精品日韩欧美一区二区三区

C語(yǔ)言

C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)鏈表逆序并輸出

時(shí)間:2025-04-27 06:07:55 C語(yǔ)言 我要投稿
  • 相關(guān)推薦

C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)鏈表逆序并輸出

  將一個(gè)鏈表逆序并輸出。可以用兩種方法來(lái)實(shí)現(xiàn),第一種是借助了一個(gè)新的空鏈表;第二種是在原來(lái)鏈表的基礎(chǔ)上直接實(shí)現(xiàn)逆序。下面百分網(wǎng)小編帶大家一起來(lái)看看詳細(xì)內(nèi)容,希望對(duì)大家有所幫助!想了解更多相關(guān)信息請(qǐng)持續(xù)關(guān)注我們應(yīng)屆畢業(yè)生考試網(wǎng)!

  實(shí)例代碼:

  頭文件:

  #include <stdio.h>

  #include <stdlib.h>

  #include <malloc.h>

  typedef int ElemType;

  typedef struct Node

  {//結(jié)點(diǎn)結(jié)構(gòu)

  ElemType value;    //值域

  struct Node *next;//指針域

  }Node,*ptr_Node;

  typedef struct LinkList

  {//鏈表結(jié)構(gòu)

  ptr_Node head; //鏈表頭結(jié)點(diǎn)指針

  ptr_Node tail;//鏈表尾結(jié)點(diǎn)指針

  int length;  //鏈表長(zhǎng)度

  }LinkList,*ptr_LinkList;

  ptr_LinkList CreateList(void)

  {//創(chuàng)建一個(gè)空鏈表

  ptr_LinkList linklist;

  linklist=(LinkList *)malloc(sizeof(LinkList));

  if(!linklist)

  {

  printf("allocation failed.\n");

  }

  linklist->head=NULL;

  linklist->tail=NULL;

  linklist->length=0;

  return linklist;

  }

  bool IsListEmpty(ptr_LinkList linklist)

  {//判斷鏈表是否為空

  if(linklist->length==0)

  {

  return true;

  }

  return false;

  }

  void InsertListHead(ptr_LinkList linklist,ElemType element)

  {//在表頭插入值為element的結(jié)點(diǎn)作為新的表頭

  ptr_Node ptr_node;

  ptr_node=(Node *)malloc(sizeof(Node)); //生成插入結(jié)點(diǎn)

  if(!ptr_node)

  {

  printf("allocation failed.\n");

  }

  else

  {

  ptr_node->value=element;

  if(linklist->length==0)

  {

  linklist->head=ptr_node;

  linklist->tail=linklist->head;

  linklist->tail->next=NULL;

  }

  else

  {

  ptr_node->next=linklist->head;

  linklist->head=ptr_node; //鏈表頭

  }

  linklist->length++; //鏈表長(zhǎng)度加1

  }

  }

  void InsertListTail(ptr_LinkList linklist,ElemType element)

  {

  ptr_Node ptr_node;

  ptr_node=(Node *)malloc(sizeof(Node)); //生成插入結(jié)點(diǎn)

  if(!ptr_node)

  {

  printf("allocation failed.\n");

  }

  else

  {

  ptr_node->value=element;

  if(linklist->length==0)

  {

  linklist->head=ptr_node;

  linklist->tail=linklist->head;

  linklist->tail->next=NULL;

  }

  else

  {

  linklist->tail->next=ptr_node;

  linklist->tail=ptr_node; //鏈表尾

  }

  linklist->length++; //鏈表長(zhǎng)度加1

  }

  }

  void InsertListPosition(ptr_LinkList linklist,int pos,ElemType element)

  {

  int i;

  ptr_Node ptr_node;

  ptr_Node temp_ptr_node;

  if(pos<1 || pos>linklist->length)

  {

  printf("The insert position is invalidate.\n");

  }

  else

  {

  ptr_node=(Node *)malloc(sizeof(Node)); //生成插入結(jié)點(diǎn)

  if(!ptr_node)

  {

  printf("allocation failed.\n");

  }

  ptr_node->value=element;

  if(pos==1)

  {

  InsertListHead(linklist,element);

  }

  else if(pos==linklist->length)

  {

  InsertListTail(linklist,element);

  }

  else

  {

  temp_ptr_node=linklist->head;

  for(i=1;i<pos-1;i++)

  {//找到第pos-1個(gè)結(jié)點(diǎn)

  temp_ptr_node=temp_ptr_node->next;

  }

  ptr_node->next=temp_ptr_node->next;

  temp_ptr_node->next=ptr_node;

  linklist->length++;

  }

  }

  }

  void Destroy(ptr_LinkList linklist)

  {//銷(xiāo)毀鏈表

  ptr_Node p=linklist->head;

  ptr_Node q;

  while(p)

  {//釋放每個(gè)結(jié)點(diǎn)空間

  q=p->next;

  free(p);

  p=NULL;

  p=q;

  }

  }

  void Traverse(ptr_LinkList linklist)

  {//輸出整個(gè)鏈表

  ptr_Node p;

  p=linklist->head;

  while(p)

  {

  printf("%4d",p->value);

  p=p->next;

  }

  }

  頭文件中實(shí)現(xiàn)了鏈表的幾個(gè)基本的操作,有的是必須的,有些是非必須的。

  實(shí)現(xiàn)代碼:

  #include "stdafx.h"

  #include "LinkList.h"

  #include <conio.h>

  ptr_LinkList InvertList(ptr_LinkList list)

  {//該方法借助一個(gè)新的空鏈表來(lái)實(shí)現(xiàn)鏈表逆序

  ptr_LinkList inverted_linklist;

  ptr_Node p;

  p=list->head;

  inverted_linklist=CreateList();//創(chuàng)建一個(gè)空鏈表

  while(p)

  {//將list鏈表中的結(jié)點(diǎn)值逆序輸入新創(chuàng)建的鏈表中,實(shí)現(xiàn)鏈表反轉(zhuǎn)

  InsertListHead(inverted_linklist,p->value);

  p=p->next;

  }

  return inverted_linklist;

  }

  void InvertLinkList(ptr_LinkList linklist)

  {//該方法直接對(duì)原有鏈表實(shí)現(xiàn)逆序,不借助其他鏈表

  ptr_Node p,q,r,m;

  m=p=linklist->head;

  q=p->next;

  r=q->next;

  while(r)

  {//依次對(duì)鏈表中的結(jié)點(diǎn)進(jìn)行反轉(zhuǎn)

  q->next=p;

  p=q;

  q=r;

  r=r->next;

  }

  q->next=p; //最后一個(gè)結(jié)點(diǎn)反轉(zhuǎn)

  linklist->head=q;

  linklist->tail=m;

  linklist->tail->next=NULL;

  }

  int _tmain(int argc, _TCHAR* argv[])

  {

  ptr_LinkList linklist;

  ptr_LinkList list;

  linklist=CreateList();

  if(linklist)

  {

  printf("We have created a new linklist.\n");

  }

  InsertListHead(linklist,12);

  InsertListHead(linklist,35);

  InsertListHead(linklist,66);

  InsertListHead(linklist,06);

  InsertListHead(linklist,11);

  InsertListHead(linklist,54);

  InsertListHead(linklist,79);

  Traverse(linklist);

  printf("\n");

  printf("The first method:\n");

  list=InvertList(linklist);

  Traverse(list);

  printf("\n");

  printf("The second method:\n");

  InvertLinkList(linklist);

  Traverse(linklist);

  printf("\n");

  getch();

  return 0;

  }

  9C++常用字符串分割方法實(shí)例匯總

【C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)鏈表逆序并輸出】相關(guān)文章:

C語(yǔ)言鏈表逆序方法技巧01-27

鏈表的C語(yǔ)言實(shí)現(xiàn)方法04-03

鏈表的C語(yǔ)言實(shí)現(xiàn)方法編程學(xué)習(xí)06-12

c語(yǔ)言鏈表的用法03-10

c語(yǔ)言鏈表的用法有哪些01-24

C#數(shù)據(jù)結(jié)構(gòu)之循環(huán)鏈表的實(shí)例代碼03-15

C語(yǔ)言的循環(huán)鏈表和約瑟夫環(huán)04-12

C語(yǔ)言輸出菱形的方法07-31

C語(yǔ)言怎樣輸出菱形08-02