1. 程式人生 > >p62 練習3.3 通過只調整指標(而不是資料)來交換兩個相鄰的元素,使用:

p62 練習3.3 通過只調整指標(而不是資料)來交換兩個相鄰的元素,使用:

由於兩種資料結構的結點結構體都較為簡單,這裡就不列出了

a.單鏈表

List creatList1(List T,int n) //建立單鏈表 (頭插法)
{
int x;Position S;
T = new struct Node;
T->Next = NULL;
for(int i = 0;i < n;i++)
{
S = new struct Node;
cin>>x;
S->Data = x;
S->Next = T->Next;
T->Next = S;
}
return T;
}

交換相鄰結點演算法:

void SwapAdjNode1(List T,Position P1,Position P2)
{
if(P1->Next!=P2)
{
cout<<"不是相鄰結點";
return;
}
else
{
PtrToNode P0;
P0 = FindPrevious(P1->Data,T);
P1 = P2->Next;
P2->Next = P1;
P0->Next = P2;
return;
}
}

b:雙鏈表

List creatList2(List T,int n) //建立雙向連結串列
{
Position rear = T; //尾插法需要定義一個尾指標
Position S;
T = new struct Node;
T->Next= NULL;
T->prior = NULL;
for(int i = 0;i < n;i++)
{
S = new struct Node; //尾插法
cin>>S->Data;
rear->Next = S;
head->prior = S;
S->prior = rear;
S->Next = head;
rear = S;
}
return T;
}

交換相鄰結點演算法:

void SwapAdjNode2(List T,Position p1,Position p2)
{
 Position P0 = FindPrevious(p1->Data,List T); 
 Position P3 = p2->Next;
 if(P1->Next!=P2)
 {
  cout<<"不是相鄰結點";
  return;
 }
 else
 {
  P0->Next = p2;
  p1->Next = p3;
  p1->prior = p2;
  p2->Next = p1;
  p2->prior = p0;
  p3->prior = p1;
 } }

這裡列出FindPreviou演算法實現:

Position FindPrevious(DataType x,List T)  //尋找前置結點;
{
 PtrToNode p;
 p = T;
 while(p->Next!=NULL&&p->Next->Data!=x)
 {
  p = p->Next;
 }
 if(p->Next == NULL)
 {
  return NULL;
 }
 else return p;
}

相關推薦

p62 練習3.3 通過調整指標資料交換相鄰元素使用

由於兩種資料結構的結點結構體都較為簡單,這裡就不列出了 a.單鏈表 List creatList1(List T,int n) //建立單鏈表 (頭插法) { int x;Position S; T = new struct Node; T->Next = NULL;

老男孩教育每日一題-第84天-文件把第一文件中的第2、3行內容添加到第二文件的第3行後面

每日一題兩個文件如下:[[email protected]/* */ ~]# cat 1.txt 111 222 333 [[email protected]/* */ ~]# cat 2.txt AAA bbb ccc ddd要求修改後的文件[[email protect

3.IOC的配置與應用annotation的方式

prot epo println 字母 set return 方法 public 重要 自動裝載 [email protected]/* */      1 public class UserService { 2 3 priv

jumpserver-0.3.2 堡壘機環境搭建圖文詳解

其他 install yum mage -128 req isa 解決 qq密碼 下載安裝包:https://github.com/jumpserver/jumpserver.git 解壓 三、執行快速安裝腳本 cd /opt/jumpserver/install pip

借助第三變量交換變量值的3種方式

int nat AS pri sdn 我們 感謝 方法 span   今天在我們學校的OJ上做題,一道非常簡單的題,突然想試試能不能不借助第三個變量,交換兩個變量值。蒙出來一半了已經,好可惜。現在把方法寫在這裏,希望以後不要忘記。 1 void fun1() 2 {

【學習筆記】慕課網—Java設計模式精講 第3章 軟體設計七大原則-3-6 迪米特原則最少知道原則

/** * 軟體設計七大原則-迪米特原則 學習筆記 * @author cnRicky * @date 2018.11.10 */ 迪米特原則(最少知道原則) 一個物件應該對其他物件保持最少的瞭解。又叫最少知道原則 迪米特原則主要強調:儘量降低類與類之間的耦合 優點:降低類與類之

一行python程式碼寫九九乘法表12,3…到100的和,交換變數的值

用一行程式碼輸出九九乘法表: 第一種方法: print('\n'.join([' '.join(["%d*%d=%d"%(i,j,i*j) for i in range(1,j+1)])for j in range(1,10)])) 第二種方法: print('\n'.join

交換陣列的內容+求1/1-1/2+1/3...-1/100的值+1-100整數中出現9的次數

交換兩個陣列的內容: 交換兩個容量相同的整形陣列的內容: #include<stdio.h> /* 交換兩個整形陣列的內容 */ void print(int x[]) { for (int i = 0; i < 3;i++) { printf("%d "

3種方法交換整數建立臨時變數+輸出一組資料最大值+簡單排序+最大公約數

交換兩個整數: 第一種: int a = 6; int b = 8; int t = 0; t = a; a = b; b = t; printf("a = %d b = %d\n", a, b); 後兩種不建立臨時變數 第二種: int a = 6; int

輸入兩個整數序列第一序列表示棧的壓入順序請判斷第二序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均相等。例如序列1,2,3,4,5是某棧的壓入順序序列4,5,3,2,1是該壓棧序列對應

    輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應     import java

團隊任務3--6號團隊-每日例會-2018-12-4

團隊任務3--6號團隊--2018-11-30 1,我們團隊為6號團隊,    開發的軟體為飛機大戰,   團隊成員為8人。  專案經理:田志吉     產品經理:孫楊    UI設計師:牛瑞    軟體測試

團隊任務3--6號團隊-每日例會-2018-12-6

團隊任務3--6號團隊--2018-12-6 1,我們團隊為6號團隊,    開發的軟體為飛機大戰,   團隊成員為8人。  專案經理:田志吉     產品經理:孫楊    UI設計師:牛瑞    軟體測試工

團隊任務3--6號團隊-每日例會-2018-12-7

團隊任務3--6號團隊--2018-12-7 1,我們團隊為6號團隊,    開發的軟體為飛機大戰,   團隊成員為8人。  專案經理:田志吉     產品經理:孫楊    UI設計師:牛瑞    軟體測試工

演算法導論_原書第3版---附帶課後部分答案已經加書籤pdf下載

內容簡介 在有關演算法的書中,有一些敘述非常嚴謹,但不夠全面;另一些涉及了大量的題材,但又缺乏嚴謹性。本書將嚴謹性和全面性融為一體,深入討論各類演算法,並著力使這些演算法的設計和分析能為各個層次的讀者接

3 Spring框架整合WEB 1與struts2整合

使用spring與struts2整合 web.xml的配置 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-in

C語言例子3之求正整數的最大公約數及最小公倍數

# include <stdio.h> void main() { int x, y, num1, num2, temp; printf("請輸入兩個正整數:\n"); scanf("%d %d", &num1, &num2); if(num1 <

第12周專案3漢諾塔--移動步驟遞迴函式

問題及程式碼: /* *Copyright (c)2014,煙臺大學計算機與控制工程學院 *All rights reserved. *檔名稱:hannuota.cpp *作 者:單昕昕 *完成日期:2014年11月13日 *版 本 號:v1.0 *

【c++程式】通過指標交換個數的值

/* *檔名稱:pointer.cpp *作 者:Zhao Tilu *完成日期:2014年10月14日 *問題描述:通過指標來交換兩個數的值 */ #include<iostream> using namespace std; void s

3.5 編寫一個程式從標準輸入讀入某職員的工作時間以小時計和每小時的工資 數計算並輸出他的工資。若職員月工作時間超過 40 小時則超過部分按原工資的 1.5 倍 計算。

/* 3.5 編寫一個程式,從標準輸入讀入某職員的工作時間(以小時計)和每小時的工資 數,計算並輸出他的工資。若職員月工作時間超過 40 小時,則超過部分按原工資的 1.5 倍 來計算。 */ #include <iostream> using namespac