單鏈表操作
//這一次補上鍊表的註釋,程式碼是空閒的時候敲出來的,如果有錯,希望幫忙糾正
//部分給出了詳細說明,這裡只選取了基本操作,因為更復雜的連結串列操作太繁瑣,這裡就不寫了
//如果有什麼不懂的地方,可以隨時詢問
#include <iostream> using namespace std; typedef int Elemtype; struct Node { Elemtype data; Node *next; }; void Init(Node **L) //主函式裡面定義Node型指標變數plist,儲存單鏈表的頭指標 { //Node *L; // L=new Node; *L=NULL; cout<<"初始化成功!\n"; } //初始化函式形參要給二級指標,相應的主函式裡面實參則是對頭指標的引用 void Clear_List(Node *head) //清空函式 { Node *flag; if(head==NULL) { cout<<"連結串列為空!\n"; return; } while(head->next!=NULL) { flag=head->next; delete(head); head=flag; } cout<<"連結串列已經清空!\n"; } //加一個標記,移動頭指標後賦值flag儲存下一個位置,然後刪除當前節點 Node *Creat_list(Node *head) //賦值函式 { //int n=0; Node *p1,*p2; p1=new Node; p2=new Node; //head=NULL; cout<<"請輸入連結串列元素,以0結束輸入:"<<endl; cin>>p1->data; p1->next=NULL; while(p1->data!=0) { //n=n+1; //if(n==1) if(head==NULL) head=p1; else p2->next=p1; p2=p1; p1=new Node; cin>>p1->data; p1->next=NULL; } //cout<<head->data; return head; } //讀入連結串列元素,在while迴圈裡面每次將當前指標儲存下來,然後不斷向後更新 void List_length(Node *head) { int i=0; while(head!=NULL) { i++; head=head->next; } cout<<"連結串列長度length: "<<i<<endl; } void Out_list(Node *head) { // cout<<head->data; if(head==NULL) cout<<"連結串列為空!\n"; else { while(head!=NULL) { cout<<head->data<<" "; head=head->next; } cout<<endl; } } Elemtype Get_elem(int index,Node *head) //給定下標,求節點元素 { int j=0; //Node *p; while(head!=NULL) { j++; if(j==index) break; head=head->next; } if(j<index) { cout<<"選取的範圍超出連結串列長度!\n"; return 0; } return head->data; } //給定的下標index,只需遍歷連結串列,當節點數符合要求時即可 int locate_elem(Node *head,Elemtype _First) //給定節點元素,求第一個下標(也可以擴充套件求多個點的下標) { int n=1; while(head!=NULL) { if(head->data==_First) return n; else n++; head=head->next; } cout<<"單鏈表裡不存在這個元素!\n"; } //同理,遍歷查找出給定元素,然後直接返回下標 bool Insert_elem(Node *head,Elemtype insert_elem,int index) { Node *p,*q; if(index<1) { cout<<"輸入下標有誤!\n"; return false; } int i=1; while(head!=NULL) { i++; head=head->next; if(i==index-1) { p=q=new Node; q=head; //head=head->next; (*p).data=insert_elem; //這裡除錯了好久。。。開始我是想定義一個節點和一個指標的,輸出的時候會報錯 //最後還是覺得都定義指標吧,p那裡不加括號的話也會報錯 (*p).next=head->next; q->next=p; //p->next=head->next; //p->data=insert_elem; return true; } } return false; } //插入步驟稍微多些,要另外定義兩個指標,思路就是遍歷到給定下標的前一個下標,同時指標q記錄下位置 //而另外一個指標p儲存節點資料,並且使它指向頭指標下一個點的地址,最後使q指向p即可 bool delete_Node(Node *head,int index) { int i=1; if(index<1) { cout<<"輸入下標值有誤!\n"; return false; } while(head!=NULL) { i++; head=head->next; if(i==index-1) { Node *p; p=new Node; p=head; head=head->next; p->next=head->next; return true; } } return false; } //操作類似於插入,不多說 bool Change_Node_Elem(Node *head,int index,Elemtype Example3) { int i=1; if(head==NULL||index<1) { cout<<"輸入錯誤或連結串列為空!\n"; return false; } while(head!=NULL) { i++; head=head->next; if(i==index) { head->data=Example3; return true; } } return false; } //也是遍歷連結串列找到給定位置,然後更新資料 int main() { //Node *plist=NULL; Node *plist; Elemtype Example1=5,Example2=7,Example3=9; cout<<"建立一個單鏈表(plist):\n"; Init(&plist); //初始化 plist=Creat_list(plist); //建立單鏈表,給單鏈表賦值,返回頭指標 cout<<"列印原始連結串列:\n"; Out_list(plist); cout<<endl; cout<<"連結串列第三個節點的元素值為: "<<Get_elem(3,plist)<<endl; cout<<endl; //呼叫Get_elem函式,返回連結串列第三個節點內元素值 //cout<<"輸出連結串列長度:\n"; List_length(plist); cout<<endl; cout<<"連結串列plist第一次出現 "<<Example1<<" 值的下標:"<<locate_elem(plist,Example1)<<endl; cout<<endl; //呼叫locate_elem函式,返回連結串列內第一個出現Example1元素的節點數 cout<<"將元素 "<<Example2<<" 插入連結串列第四個節點上:"<<endl; if(Insert_elem(plist,Example2,4)) cout<<"Insert is OK!\n"; else cout<<"Insert is not OK!\n"; cout<<"改變後的連結串列為:"<<endl; Out_list(plist); cout<<endl; cout<<"將連結串列第七個節點刪除:"<<endl; if(delete_Node(plist,7)) cout<<"Delete is OK!\n"; else cout<<"Delete is not OK!\n"; cout<<"改變後的連結串列為:"<<endl; Out_list(plist); cout<<endl; cout<<"將連結串列plist中第三個節點的元素換成 "<<Example3<<endl; if(Change_Node_Elem(plist,3,Example3)) { cout<<"改變後的連結串列為:\n"; Out_list(plist); } else cout<<"數值改變失敗!\n"; cout<<endl; cout<<"執行清空函式:"<<endl; Clear_List(plist); return 0; }
相關推薦
帶頭結點的單鏈表操作說明
內存 arr 位置 not space n) end front tin 一、單鏈表簡介 相對於以數組為代表的“順序表”而言,單鏈表雖然存儲密度比較低(因為數據域才是我們真正需要的,指針域只是用來索引,我們並不真正需要它),但是卻具有靈活分配存儲空間、方便數據元素的刪除、方
C單鏈表操作
i++ 釋放 str alloc malloc 指向 clear stdio.h print #include <stdio.h> #include <stdlib.h> #define ElemType int #define Statu
java 模擬單鏈表操作
star node next ray datanode lse util class null 節點類 public class ListNode {int data;//數據ListNode next;//指針public ListNode(int x){data=x;}
資料結構-單鏈表操作
// // main.c // Link_List // // Created by Smallflyfly on 2018/11/9. // Copyright © 2018 fang. All rights reserved. // #include <stdio.h>
單鏈表操作之一元多項式的合併
多項式就是單項式的加減法,對於單項式可以用一組數表示,例如2X^3,可以表示為(2,3)。我們可以使用單鏈表來進行多項式的合併操作。 一:首先我們先建立新的資料型別multi typedef struct multi{ int coef; int index; s
libevent中單鏈表操作
#include <stdio.h> #ifdef QUEUE_MACRO_DEBUG /* Store the last 2 places the queue element or head was altered */ struct qm_trace { &
C++ 單鏈表操作總結
第一、單鏈表的定義和操作 #include <iostream> using namespace std; template <typename T> struct Node { T data; Node* next; }; templat
資料結構上機測試2-1:單鏈表操作A
#include <stdio.h> #include <string.h> #include <stdlib.h> int sum; struct node { int data; struct node *
輸入字串,建立一個單鏈表,操作單鏈表使每相鄰的兩個字元交換位置
題目如上圖所示 ,程式碼如下: #include <iostream> #include <string> using namespace std; stru
python 單鏈表操作
寫在之前 在程式設計裡,我們經常需要將同為某個型別的一組資料元素作為一個整體來使用,需要建立這種元素組,用變數來記錄它們或者傳入函式等等等等,「線性表」就是這樣一組元素的抽象,它是某類元素的集合並且記錄著元素之間一種順序關係,是最基本的資料結構之一,在實際程式中運用非常
單鏈表操作函式C++實現
最近在學習資料結構的連結串列,剛開始接觸,肯定有某些沒發現的錯誤,歡迎大家指出來。 好了,不說廢話了,直接上程式碼 首先是單鏈表的.H檔案 #pragma once typedef int DataType; #define Node ElemType //定義節點
單鏈表操作
//這一次補上鍊表的註釋,程式碼是空閒的時候敲出來的,如果有錯,希望幫忙糾正 //部分給出了詳細說明,這裡只選取了基本操作,因為更復雜的連結串列操作太繁瑣,這裡就不寫了 //如果有什麼不懂的地方,可以隨時詢問 #include <iostream> using
資料結構之---c語言實現迴圈單鏈表操作
wechat:812716131 ------------------------------------------------------ 技術交流群請聯絡上面wechat ----------------------------------------------
帶頭結點的單鏈表操作(頭插法)-c++
span str out let 單鏈表 null 頭結點 操作 truct c++編寫 帶頭結點的單鏈表操作(頭插法)(和c語言差不多) #include<iostream> #include<conio.h> using namespa
單鏈表實現及其基本操作
rate || == tac rgs 是否 targe param val import java.util.HashMap; import java.util.Scanner; import java.util.Stack; /** * *
【C++/數據結構】單鏈表的基本操作
clear default als troy pub 插入 else fonts pac #pragma once #ifndef _CLIST_H_ #define _CLIST_H_ #include <iostream> #include <
設A和B是兩個按元素值遞增有序的單鏈表,寫一算法將A和B歸並為按按元素值遞減有序的單鏈表C,試分析算法的時間復雜度。(利用上篇帶有頭結點的線性鏈表操作)
遞增 else 長度 初始化 get b- sizeof int insert #include <stdio.h>#include <malloc.h>typedef int DataType;#include "LinList.h" void
單鏈表的基本操作實現
turn lag 個數 信息 listt 帶頭結點 img 鏈表的基本操作 原因 1、寫這篇博文的原因 C語言有三個重要部分:流程控制、函數、指針。 對於指針,單單了解它的簡單運用是遠遠不夠的,最重要的是學習鏈表。所以這篇文章通過用C語言實現鏈表的一些基本操作和總結,希望對
單鏈表的基本操作
def cat html str 開始 建立 新的 UC body 單鏈表基本操作函數 /*************************************************************************************//
遞歸實現單鏈表的各種基本操作
name node erro 入棧 get find 比較 spa 遞歸循環 1 #include<iostream> 2 using namespace std; 3 4 #define OK 1 5 #define ERROR 0