C語言實現單鏈表逆序與逆序輸出例項
這篇文章主要介紹了C語言實現單鏈表逆序與逆序輸出,是資料結構與演算法中比較基礎的重要內容,有必要加以牢固掌握,需要的朋友可以參考下
單鏈表的逆序輸出分為兩種情況,一種是隻逆序輸出,實際上不逆序;另一種是把連結串列逆序。本文就分別例項講述一下兩種方法。具體如下:
1.逆序輸出
#include<iostream>
#include<stack>
#include<assert.h>
using namespace std;
typedef struct node{
int data;
node * next;
}node;
//尾部新增
node * add(int n, node * head){
node * t = new node;
t->data = n;
t->next = NULL;
if (head == NULL){
head = t;
}
else if (head->next == NULL){
head->next = t;
}
else{
node * p = head->next;
while (p->next != NULL){
p = p->next;
}
p->next = t;
}
return head;
}
//順序輸出
void print(node * head){
node * p = head;
while (p != NULL){
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
//遞迴
void reversePrint(node * p){
if (p != NULL ){
reversePrint(p->next);
cout << p->data << " ";
}
}
//棧
void reversePrint2(node * head){
stack<int> s;
while (head != NULL){
s.push(head->data);
head = head->next;
}
while (!s.empty()){
cout << s.top() << " ";
s.pop();
}
}
int main(){
node * head = NULL;
for (int i = 1; i <= 5; i++){
head = add(i, head);
}
print(head);
reversePrint(head);
reversePrint2(head);
system("pause");
return 0;
}
逆序輸出可以用三種方法: 遞迴,棧,逆序後輸出。最後一種接下來講到。
2.單鏈表逆序
#include<iostream>
#include<stack>
#include<assert.h>
using namespace std;
typedef struct node{
int data;
node * next;
}node;
node * add(int n, node * head){
node * t = new node;
t->data = n;
t->next = NULL;
if (head == NULL){
head = t;
}
else if (head->next == NULL){
head->next = t;
}
else{
node * p = head->next;
while (p->next != NULL){
p = p->next;
}
p->next = t;
}
return head;
}
//迴圈
node * reverse(node * head){
if (head == NULL || head->next == NULL){
return head;
}
node * p1 = head;
node * p2 = head->next;
node * p3 = NULL;
head->next = NULL;
while (p2 != NULL){
p3 = p2;
p2 = p2->next;
p3->next = p1;
p1 = p3;
}
head = p1;
return head;
}
void print(node * head){
node * p = head;
while (p != NULL){
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
//遞迴
node * reverse2(node * p){
if (p == NULL || p->next == NULL){
return p;
}
node * newHead = reverse2(p->next);
p->next->next = p;
p->next = NULL;
return newHead;
}
int main(){
node * head = NULL;
for (int i = 1; i <= 5; i++){
head = add(i, head);
}
print(head);
head = reverse(head);
print(head);
head = reverse2(head);
print(head);
system("pause");
return 0;
}
這裡連結串列逆序用了兩種方法:迴圈,遞迴。讀者最容易理解的方法就是在紙上自己畫一下。
希望本文所述例項對大家的資料結構與演算法學習能有所幫助。
相關推薦
C語言實現單鏈表逆序與逆序輸出例項
這篇文章主要介紹了C語言實現單鏈表逆序與逆序輸出,是資料結構與演算法中比較基礎的重要內容,有必要加以牢固掌握,需要的朋友可以參考下 單鏈表的逆序輸出分為兩種情況,一種是隻逆序輸出,實際上不逆序;另一種是把連結串列逆序。本文就分別例項講述一下兩種方法。具
用c語言實現單鏈表的逆序輸出
<span style="font-family: Arial, Helvetica, sans-serif;">可以用遞迴,如果沒到連結串列尾,則遞迴查詢,否則輸出當前值。下面只是演算法表示,不能直接放到程式裡編譯執行。</span><span style="fo
C語言實現單鏈表的逆置
單鏈表的逆置是一個非常經典的問題,這裡利用兩個思想進行解決。 首先,我們需要看下原理圖,其實兩個思想都是一樣的,都是使後一個的節點的 next 指標指向前一個節點,依次遞推,直到第二個節點指向第一個節點,第一個節點的 next 指標指向 NULL。
C語言實現單鏈表節點的刪除(帶頭結點)
data art pos grand urn ria tps move sni 我在之前一篇博客《C語言實現單鏈表節點的刪除(不帶頭結點)》中具體實現了怎樣在一個不帶頭結點的單鏈表的刪除一個節點,在這一篇博客中我改成了帶頭結點的單鏈表。代碼演示樣例上傳至 h
C語言實現單鏈表的節點插入(帶頭結點)
alloc tails 函數 file ret con 實現 單獨 fun 我在之前一篇博客《C語言實現單鏈表(不帶頭結點)節點的插入》中具體實現了怎樣在一個不帶頭結點的單鏈表中進行節點的插入。可是在實際應用中,帶頭結點的鏈表更為經常使用。更為方便。今天我們
c語言實現單鏈表的所有介面
此次工程還是使用了3個原始檔slist.h(標頭檔案原始碼),slist.c(實現介面的具體程式碼),test.c(單鏈表邏輯) slist.h #pragma once #include<stdio.h> #include<stdlib.h> #inclu
C語言實現單鏈表反轉
最近在考研複習,記錄一下基礎的資料結構演算法,有事沒事翻一翻,以防忘了 自己寫了個翻轉連結串列演算法,感覺要比別人的要通俗易懂些 void Reverse(List *L){ //分別是當前節點,直接前驅節點,直接後繼節點 LNode *current,
C語言實現單鏈表演算法
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct slist_node_s { struct slist_node_
關於C語言實現單鏈表為什麼要用二級指標
一級指標作為函式引數可以交換兩個數的值,二級指標作為函式引數可以改變一級指標的值,也就是改變地址。 typedef struct linknode{ char* data; linknode* next }linknode, linklist; 單鏈表中的尾插函式,如果傳入一個一級指標
C語言實現單鏈表的增刪查改
連結串列:一種鏈式儲存的線性表,用一組地址任意的儲存單元存放線性表的資料元素,稱儲存單元為一個節點。 連結串列分類: 單鏈表 雙鏈表 雙向迴圈連結串列 程式碼實現單鏈表的增刪查改: linklist.h檔案 #pragma once #incl
C語言實現單鏈表的建立、插入、刪除
節點資料結構: /* *定義鏈式儲存線性表的結構 */ typedef struct LNode { int data; //資料域 struct LNode * next;
c語言實現單鏈表資料結構及其基本操作
帶頭結點單鏈表。分三個檔案,分別為標頭檔案,測試檔案,原始碼檔案。 給出了單鏈表的部分操作,每個操作都有對應的註釋說明該函式功能。 test.c 檔案中,對輸入資料是否合法進行了檢測,但是並未實現輸入資料不合法時應該採取的措施。 測試檔案 通過一個選單來測試單鏈
C語言:單鏈表實現(二) 就地逆置,就地歸併
#include<iostream> #include<stdio.h> #include<math.h> #define LEN sizeof(struct Nodelist) using namespace std; typedef
C語言 ,單鏈表實現佇列(初始化,入隊,出隊,元素個數,隊首元素,是否為空)
單鏈表實現佇列: 連結串列為空的判斷條件:pQueue->pFront==pQueue->pRear或者若結構體中存在數的個數時,判斷pQueue->size==0,即元素個數為0 標頭檔案:佇列.h #pragma once #include<
【C語言】單鏈表的實現
單鏈表 單鏈表是一種鏈式存取的資料結構,用一組地址任意的儲存單元存放線性表中的資料元素。 單鏈表結構如下: typedef int DataType; typedef struct Node { struct Node* next; /
資料結構C語言版--單鏈表的基本功能實現
/* * 構造一個鏈式儲存的線性表(當輸入9999時,結束構造過程),然後輸出該線性表 * 並統計該線性連結串列的長度 。 *注:new和delete是C++的運算子 malloc和free是C++/C的標準庫函式 */ #include<st
用C語言實現順序表的增刪查改和逆置
在資料結構中,我們最開始接觸的就是順序表,那麼順序表是什麼呢?順序表是在計算機記憶體中以陣列的形式儲存的線性表,是指用一組地址連續的儲存單元依次儲存資料元素的線性結構。線性表採用順序儲存的方式儲存就稱之為順序表。順序表是將表中的結點依次存放在計算機記憶體中一組地
用C++實現單鏈表的建立、逆置和輸出
題目描述:在已知單鏈表頭節點的情況下,設計演算法逆置單鏈表並輸出 方法一:採用首先將頭節點指向空,讓其變為尾節點,然後利用中間節點 p、q 將其後的節點一個接一個改為指向前面的節點 /******
C語言線性單鏈表相關函式和演算法的基本實現
備考期間嘗試寫了一些基本資料結構的C語言實現,現做以下記錄(基本資料元以int型為例):全域性定義及依賴:#include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR 0 #d
數據結構之---C語言實現廣義表頭尾鏈表存儲表示
tle substring [1] 原子 depth ring else if max sig //廣義表的頭尾鏈表存儲表示 //楊鑫 #include <stdio.h> #include <malloc.h> #include <std