1. 程式人生 > >資料結構第五版第二章實驗2.實現單鏈表的各種基本運算

資料結構第五版第二章實驗2.實現單鏈表的各種基本運算

編寫一個程式exp2-2.cpp,實現單鏈表的各種基本運算(假設單鏈表的元素型別為char)

並在此基礎上完成如下功能:

(1)初始化單鏈表h;
(2)採用尾插法依次插入元素a,b,c,d,e;
(3)輸出單鏈表h;
(4)輸出單鏈表h長度;
(5)判斷單鏈表h是否為空;
(6)輸出單鏈表h的第3個元素;
(7)輸出元素a的位置;
(8)在第4個元素位置上插入元素f;
(9)輸出單鏈表h;
(10)刪除h的第3個元素;
(11)輸出單鏈表h;
(12)釋放單鏈表h

//檔名:單鏈表的基本運算實現

#include <stdio.h>
#include <malloc.h> typedef char ElemType; typedef struct LNode //定義單鏈表結點型別 { ElemType data; struct LNode *next; } LinkList; void InitList(LinkList *&L) //初始化線性表 { L=(LinkList *)malloc(sizeof(LinkList)); //建立頭結點 L->next=NULL; } void DestroyList(LinkList *&L) //銷燬線性表
{ LinkList *p=L,*q=p->next; while (q!=NULL) { free(p); p=q; q=p->next; } free(p); } bool ListEmpty(LinkList *L) //判線性表是否為空表 { return(L->next==NULL); } int ListLength(LinkList *L) //求線性表的長度 { LinkList *p=L;int i=0; while (p->next!=NULL) { i++; p=p->next; } return
(i); } void DispList(LinkList *L) //輸出線性表 { LinkList *p=L->next; while (p!=NULL) { printf("%c ",p->data); p=p->next; } printf("\n"); } bool GetElem(LinkList *L,int i,ElemType &e) //求線性表中某個資料元素值 { int j=0; LinkList *p=L; //p指向頭節點,j置為0(即頭節點的序號為0) while (j<i && p!=NULL) //找第i個節點 { j++; p=p->next; } if (p==NULL) //不存在第i個數據節點,返回0 return false; else //存在第i個數據節點,返回1 { e=p->data; return true; } } int LocateElem(LinkList *L,ElemType e) //按元素值查詢 { int i=1; LinkList *p=L->next; //p指向開始節點,i置為1(即開始節點的序號為1) while (p!=NULL && p->data!=e) //查詢data值為e的節點,其序號為i { p=p->next; i++; } if (p==NULL) //不存在元素值為e的節點,返回0 return(0); else //存在元素值為e的節點,返回其邏輯序號i return(i); } bool ListInsert(LinkList *&L,int i,ElemType e) //插入資料元素 { int j=0; LinkList *p=L,*s; //p指向頭節點,j置為0(即頭節點的序號為0) while (j<i-1 && p!=NULL) //查詢第i-1個節點 { j++; p=p->next; } if (p==NULL) //未找到第i-1個節點,返回false return false; else //找到第i-1個節點*p,插入新節點並返回1 { s=(LinkList *)malloc(sizeof(LinkList)); s->data=e; //建立新節點*s,其data域置為e s->next=p->next; //將*s插入到*p之後 p->next=s; return true; } } bool ListDelete(LinkList *&L,int i,ElemType &e) //刪除資料元素 { int j=0; LinkList *p=L,*q; //p指向頭節點,j置為0(即頭節點的序號為0) while (j<i-1 && p!=NULL) //查詢第i-1個節點 { j++; p=p->next; } if (p==NULL) //未找到第i-1個節點,返回false return false; else //找到第i-1個節點*p { q=p->next; //q指向第i個節點 if (q==NULL) //若不存在第i個節點,返回false return false; e=q->data; p->next=q->next; //從單鏈表中刪除*q節點 free(q); //釋放*q節點 return true; //返回true表示成功刪除第i個節點 } } extern void InitList(LinkList *&L); extern void DestroyList(LinkList *&L); extern bool ListEmpty(LinkList *L); extern int ListLength(LinkList *L); extern void DispList(LinkList *L); extern bool GetElem(LinkList *L,int i,ElemType &e); extern int LocateElem(LinkList *L,ElemType e); extern bool ListInsert(LinkList *&L,int i,ElemType e); extern bool ListDelete(LinkList *&L,int i,ElemType &e); int main() { LinkList *h; ElemType e; printf("單鏈表的基本運算如下:\n"); printf(" (1)初始化單鏈表h\n"); InitList(h); printf(" (2)依次採用尾插法插入a,b,c,d,e元素\n"); ListInsert(h,1,'a'); ListInsert(h,2,'b'); ListInsert(h,3,'c'); ListInsert(h,4,'d'); ListInsert(h,5,'e'); printf(" (3)輸出單鏈表h:"); DispList(h); printf(" (4)單鏈表h長度=%d\n",ListLength(h)); printf(" (5)單鏈表h為%s\n",(ListEmpty(h)?"空":"非空")); GetElem(h,3,e); printf(" (6)單鏈表h的第3個元素=%c\n",e); printf(" (7)元素a的位置=%d\n",LocateElem(h,'a')); printf(" (8)在第4個元素位置上插入f元素\n"); ListInsert(h,4,'f'); printf(" (9)輸出單鏈表h:"); DispList(h); printf(" (10)刪除h的第3個元素\n"); ListDelete(h,3,e); printf(" (11)輸出單鏈表h:"); DispList(h); printf(" (12)釋放單鏈表h\n"); DestroyList(h); }

實際上課本上要求分別設計Linklist和exp2-2兩個程式,而這裡我將兩部分合併為一個,結果是相同的。如果要拆分開,只需將main函式提取出來作為linklist程式。

相關推薦

資料結構第二實驗2.實現單鏈各種基本運算

編寫一個程式exp2-2.cpp,實現單鏈表的各種基本運算(假設單鏈表的元素型別為char) 並在此基礎上完成如下功能: (1)初始化單鏈表h; (2)採用尾插法依次插入元素a,b,c,d,e; (3)輸出單鏈表h; (4)輸出單鏈表h長度;

C++Primer 第二習題答案(11~20)

2.11 涉及知識點: 宣告:使得名字為程式所知,如果想使用該變數,則必須實現包含其宣告。宣告會確定變數的名字和型別。 定義:創建於名字關聯的實體。定義會申請儲存空間,可能會賦予初始值。 如果想宣告一

資料結構次作業

特殊線性表——棧 const int StackSize=100; template class SeqStack { public: SeqStack(){top=-1;}; ~SeqStack(); void Push(T x); T Pop(); T GetTop(){if(top!=

玩轉資料結構——:二分搜尋樹

內容概要: 為什麼要研究樹結構 二分搜尋樹基礎 向二分搜尋樹中新增元素 改進新增操作:深入理解遞迴終止條件 二分搜尋樹的查詢操作 二手搜尋樹的前序遍歷 二分搜尋樹的中序遍歷和後序遍歷 深入理解二分搜尋樹的前中後遍歷(深度遍歷) 二分搜尋樹是的

資料結構實驗2.實現鏈棧的各種基本運算

(1)初始化棧s。 (2)判斷棧s是否為空。 (3)依次進棧元素a,b,c,d,e。 (4)判斷棧s是否為空。 (5)輸出出棧序列。 (6)判斷棧s是否為空。 (7)釋放棧。 #include <stdio.h> #include &l

C++ Primer 第一總結

   由於第一章只是簡單介紹,我就沒什麼好總結的。於是,我就寫一些我覺得自己要記住和自己以前不知道的知識點吧。    1. iostream庫包含兩個基礎型別 istream 和 ostream,分別表示輸入流和輸出流。一個流就是一個字元序列,是從IO裝置

《C++Primer》 第一程式設計題部分答案

練習1.9 #include<iostream> using namespace std; int main() { int val = 50, sum = 0; while (val <= 100) { sum += val; ++val

C Prime Plus(6) 第二答案

/*前幾個太簡單了,就不贅述了(其實就是忘了存,尷尬,汗.jpg)*/ /*2.4*/ #include<stdio.h> void jolly(); void deny(); int main() { jolly(); jolly(); jolly()

為什麼我要放棄javaScript資料結構與演算法(第二)—— 陣列

第二章 陣列 幾乎所有的程式語言都原生支援陣列型別,因為陣列是最簡單的記憶體資料結構。JavaScript裡也有陣列型別,雖然它的第一個版本並沒有支援陣列。本章將深入學習陣列資料結構和它的能力。 為什麼用陣列 需求:儲存所在城市每個月的平均溫度,可以這麼實現 var averageTemp1 = 43.3;

《深入理解計算機系統》()第二部分知識點總結

資訊的表示和處理      本渣渣要進行CSAPP期中考了,但是上半學期啥也沒聽QWQ,只能臨陣磨槍了*學習要點*1、計算機如何表示數字2、其他形式資料的基本屬性*資訊儲存*位元組:最小的可定址的記憶體單位地址:記憶體中每個位元組都由一個唯一的數字來標識虛擬地址空間:所有可能

資料結構基礎筆記】第二線性單鏈

目錄 一、簡要 1、涵蓋內容 2、學習要求 二、匯入 三、線性連結串列 1、鏈式儲存結構 2、注意點 四、單鏈表 1、單鏈表優點 2、單鏈表缺點 3、結點型別描述 4、注意點 五、單鏈表的實現 1、連結串列的創立 2、連結串列的操作

c++ primer 第一習題書店程式

    #include <iostream>       #include "Sales_item.h"        /* run this program using the console pauser or add your own getch, sy

C++ Primer 第一Sales_item.h原始碼

/* * This file contains code from "C++ Primer, Fifth Edition", by Stanley B. * Lippman, Josee Lajoie, and Barbara E. Moo, and is covered

JS資料結構篇 --- 二叉樹和二叉查詢樹

一、二叉樹的基本概念 從邏輯結構角度來看,前面說的連結串列、棧、佇列都是線性結構;而今天要了解的“二叉樹”屬於樹形結構。 1.1 多叉樹的基本概念,以上圖中“多叉樹”為例說明   節點:多叉樹中的每一個點都叫節點;其中最上面的那個節點叫“根

第二作業題2-連結串列-計算機17級 7-3 jmu-ds-單鏈基本運算 (15 分)

7-3 jmu-ds-單鏈表的基本運算 (15 分) 實現單鏈表的基本運算:初始化、插入、刪除、求表的長度、判空、釋放。 (1)初始化單鏈表L,輸出L->next的值; (2)依次採用尾插法插入元素:輸入分兩行資料,第一行是尾插法需要插入的字元資料的個數,第二行是具體

數據結構(嚴蔚敏、吳偉民)——讀書筆記-2、 線性及其基本運算、順序存儲結構

content pri 線性 時間復雜度 length 將他 ron 個數 p s 第二章 線性表 2.1 線性表及其基本運算 2.2 線性表的順序存儲結構 2.3 線性表的鏈式存儲結構 1、線性表:是n個數據元素的有限序列。

資料結構六次作業、六

第五章 樹通常有前序遍歷,後序遍歷和層序遍歷三種。 前序遍歷:template<class T> void BiTree<T>::PreOrder(BiNode<T>*root)

資料結構四次作業第二

const int MaxSize=100; template class SeqList { public: SeqList(); SeqList(T a[],int n); ~SeqList(); int Length(){return length;} T Get(int i); in

資料結構C語言第二迷宮)

轉自未空blog   //我剛開始對STACK的記憶體分配那有點問題,後來用這個程式碼除錯了下,感覺有點明白了,   地址由高到低分配,然後程式碼中的base和top剛開始指向地址最低的地方,記憶體不夠時重新在原有基礎上新增記憶體,top指向原有的棧頂,然後繼續

資料結構2上機實驗2.1

問題描述:實現順序表的基本運算(1-12具體要求見課本P62),作為對已經學過的順序表的小revision~ 原始碼: list.h: #include <stdio.h> #includ