1. 程式人生 > >連結串列——單向連結串列

連結串列——單向連結串列

閒來無事,學習一下連結串列,方便後面研究webkit的memorycache的LRU演算法

#include <iostream>
#include "assert.h"
using namespace std;
class Student{
public:

Student *operator new();
void operator delete(void *);

public:

	int m_studentID;
	int m_score;
	Student *next;


};
class Student;
class ListUtility{

public:
	Student *createList();
	void insertNode(Student **head,int num,Student *node);//在指定號碼後插入新節點
	void deleteNode(Student **head,int num);//刪除指定號碼的節點
	void printList(Student *list);//輸出連結串列
	void collectRes(Student *list);

};
void ListUtility::printList(Student *list)
{
	cout<<"print list start!"<<endl;
	while(list){
		cout<<list->m_studentID<<" "<<list->m_score<<endl;
		list=list->next;
	}
	cout<<"print list end!"<<endl;
}
Student *ListUtility::createList()
{

	int number;
	int score;
	Student *head;
	Student *p1;
	Student *p2;
	int count=0;
	while(cin>>number&&number){

		p1=new Student;
		if(!p1)
			return NULL;
		cin>>score;
		if(++count==1)
			head =p1;
		else
			p2->next=p1;
		p2=p1;
		p1->m_score=score;
		p1->m_studentID=number;
	}
	p2->next=NULL;
	p1=NULL;
	return head;

}
void ListUtility::deleteNode(Student **head,int num)
{

	Student *p1=*head;
	Student *p2;
	while(p1){
	
		if(p1->m_studentID==num){
			if(p1==*head){
				*head=p1->next;
				break;
			}
			else{
				assert(p2);
				p2->next=p1->next;
				delete p1;
				p1=NULL;
				break;
			}
		}
		p2=p1;
		p1=p1->next;
		
	}
}
void ListUtility::insertNode(Student **head,int num,Student *node)
{
	Student *p1=*head;
	if(num==0){//0預設插入到最前面
		node->next=p1;
		*head=node;
		return;
	}

	while(p1){

		if(p1->m_studentID==num){
			node->next=p1->next;
			p1->next=node;

		}
		p1=p1->next;
	}
}
void ListUtility::collectRes(Student *list)
{
	Student *p1;
	p1=list;
	Student *p2;
	while(p1){

		p2= p1->next;
		p1->next=NULL;
		delete p1;
		p1 =p2;

	}
}
int main(void)
{
	ListUtility factory;
	Student *myList=factory.createList();
	factory.printList(myList);
	Student newComming;
	newComming.m_score=99;
	newComming.m_studentID=24;
//	factory.insertNode(&myList,3,&newComming);
	factory.printList(myList);
	factory.deleteNode(&myList,2);
	factory.printList(myList);
	factory.collectRes(myList);//上面的insert的是一個物件而連結串列中的是動態new的,不能直接delete
	
}


<pre name="code" class="cpp">

相關推薦

《資料結構與演算法》之連結串列單向連結串列

連結串列(LinkedList) 連結串列是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過連結串列中的指標連結次序實現的。連結串列由一系列節點(連結串列中每一個元素稱為節點)組成,節點可以在執行時動態生成。每個節點包括兩個部分:一個是儲存資料元素的資料域,另一個是儲存下一個

連結串列——單向連結串列

閒來無事,學習一下連結串列,方便後面研究webkit的memorycache的LRU演算法 #include <iostream> #include "assert.h" using namespace std; class Student{ public:

連結串列-單向連結串列&&UVa 11988 Broken Keyboard(a.k.a.Beijiu Text)(破損的鍵盤(悲劇文字))的理解與解析

連結串列-單向連結串列&&UVa 11988 Broken Keyboard(a.k.a.Beijiu Text)(破損的鍵盤(悲劇文字)) C++最新的2011標準C++1

c實現功能(13)實現單向連結串列的簡要功能

#include <stdio.h> #include <stdlib.h> //利用結構體建立節點 struct list{ //建立資料域 int data; //建立指標域 struct list *next; }; //實現建立一個

單向連結串列的排序-插入、歸併與快排

好久沒有做連結串列相關的題了,在八月的最後一天,實現單向連結串列的排序,以此紀念。 參考:牛客網 https://blog.csdn.net/bxw1992/article/details/77155152 https://www.cnblogs.com/TenosDoIt

對於單向連結串列的10幾種常用演算法

list.c檔案如下 #include "list.h" /*返回head連結串列POS節點的位置*/ LINK list_moov_pos(LINK head,int pos){ LINK node = head; while(--pos) node = node->pNe

JAVA生成帶環的單向連結串列(針對leetcode是否有環那道題)

leetcode上面有一道題是判斷單向連結串列是否有環,方法基本上都是用快慢指標。 但是我突然想測試一下,但是不知道怎麼生成有環的連結串列,別說有環的,就是生成個連結串列都挺難的。 所以自己就在網上找了一下,發現生成連結串列還是有的。 但是沒有生成帶環的連結串列,所以自己總結了一下,寫了

單向連結串列反轉,k個一組

有連結串列1 2 3 4 5 6 7 8 ,3個一組反轉結果:3 2 1 6 5 4 8 7 Node* KNodeReverse(Node* root,int k) { Node *cur,*pre,*next;//必須有三個臨時指標,因為cur需要知道連線的物件,同時不丟失它的下個物件

C++ 合併兩個有序單向連結串列

struct Node { Node* pNext; int val; Node(int v) { val = v; pNext = nullptr; } }; Node* MergeNodeList(Node* p1,Node*p2) { Node *pRoot,*pCur

單向連結串列的是否有環及環入口

參考部落格:https://www.cnblogs.com/dancingrain/p/3405197.html bool HasLoop(Node* root, Node* &Entry) { if(!root) return false; bool bHasLoop = f

java資料結構——單向連結串列

連結串列是非常常見的一類線性結構的資料結構,每個節點包含有指標域和資料域,常見的包括單項列表、雙向列表、迴圈列表。這篇文章將詳細介紹單向連結串列。 單向連結串列每個節點包含當前節點的資料域和一個指向下一個節點的指標域,如下: 本文將介紹連結串列的尾節點插入、頭結點插入、指定位置插入

02-看圖理解資料結構與算法系列(單向連結串列)

單向連結串列 單向連結串列屬於連結串列的一種,也叫單鏈表,單向即是說它的連結方向是單向的,它由若干個節點組成,每個節點都包含下一個節點的指標。 單鏈表特點 建立單鏈表時無需指定連結串列的長度,這個比起陣列結構更加有優勢,而陣列縱使實現成動態陣列也是需要指定一個更大的陣

java對單向單向連結串列的操作

概述:眾所周知,資料對於資料的儲存時連續的,也就是說在計算機的記憶體中是一個整體的、連續的、不間斷的ADT資料結構。伴隨的問題也會隨之出現,這樣其實對於記憶體的動態分配是不靈活的。而連結串列具備這個優點。因此連結串列對於資料的插入和刪除是方便的,但是對於資料的查詢是麻煩的。因為需要遍歷連

單向非迴圈連結串列連結串列建立、節點插入、連結串列列印、節點長度計算、連結串列清空、連結串列銷燬

/* 單向非迴圈連結串列:    初始化    前插入     後插入    列印    連結串列長度    清空 &

JAVA基礎(63)---單向連結串列

鏈式儲存結構 結點在儲存器中的位置是任意的,即邏輯上相鄰的資料元素在物理上不一定相鄰。 單鏈表的儲存映像 單向連結串列的每個資料項儲存的都是  資料 + 下一個資料地址  ;雙向連結串列儲存的是  上一個資料地址 + 資料 + 下一個資料地址

C++之單向連結串列

定義: struct ListNode{ int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} } 1.定義新的單向連結串列 ListNode *dummy = new ListNode(

單向連結串列例項:終端互動簡易通訊錄

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 6 typedef struct Contacts_infomation{ 7

Python手寫模擬單向連結串列物件和棧物件

  單向連結串列: class error(Exception): def __init__(self,msg): super(error,self).__init__() self.msg=msg def __str__(self):

單向連結串列取指定節點

package com.weshare.eel.task.utils; public class Node { private int nodeValue; private Node nextNode; public int getNodeValue()

單向連結串列的基本運算

// //  main.cpp //  單向連結串列的基本運算 //  Created by 柯木超 on 2018/11/27. //  Copyright © 2018 柯木超. All rights reserved. // #include <