單鏈表基本操作的C語言實現(鏈式儲存結構)
#include<stdio.h> #include<stdlib.h> typedef int DataType; typedef struct Node{ DataType data; struct Node *next; }List; #define Num 3 List* InitList(); void CreateListHead(List *l, int n); void CreateListTail(List *l, int n); int Length(List *l); void TraverseList(List *l); int Find(List *l, DataType d); void Insert(List *l, int n, DataType data); void Delete(List *l, int n); void ClearList(List *l); void main() { int n, pos, input; List *l; l = InitList(); /*CreateListHead(l, Num); printf("線性表的長度是%d\n", Length(l)); TraverseList(l);*/ CreateListTail(l, Num); printf("線性表的長度是%d\n", Length(l)); TraverseList(l); //printf("%d %d %d %d\n", l->data, l->next->data, l->next->next->data, l->next->next->next->data);//分別列印各個節點的資料域 printf("請輸入要查詢的元素:"); scanf_s("%d", &input); printf("要查詢的元素在連結串列中第%d個位置\n", Find(l, input)); printf("請輸入要插入的元素位置和相應資料:"); scanf_s("%d%d", &pos, &input); Insert(l, pos, input); printf("線性表的長度是%d\n", Length(l)); TraverseList(l); printf("請輸入要刪除的節點下標:"); scanf_s("%d", &n); Delete(l, n); printf("線性表的長度是%d\n", Length(l)); TraverseList(l); ClearList(l); printf("清空線性表後長度為%d\n", Length(l)); TraverseList(l); } //連結串列初始化(即分配頭結點的記憶體空間) List* InitList() { List *l; l = (List*)malloc(sizeof(List)); if (!l) { printf("初始化失敗"); exit(1); } l->next = NULL;//頭結點指標域為空 return l; } //建立帶頭結點的線性表(頭插法) void CreateListHead(List *l, int n) { int i, data; List *p; for (i = 0; i < n; i++) { p = (List*)malloc(sizeof(List)); printf("請輸入資料:\n"); scanf_s("%d", &data); p->data = data; p->next = l->next;//確定邏輯關係 l->next = p; } } //建立帶頭結點的線性表(尾插法) void CreateListTail(List *l, int n) { int i, data; List *p,*r = l; for (i = 0; i < n; i++) { p = (List*)malloc(sizeof(List)); printf("請輸入資料:\n"); scanf_s("%d", &data); p->data = data; //p->next = r->next; r->next = p;//確定邏輯關係 r = p; } r->next = NULL; } //求線性表的長度 int Length(List *l) { List *r = l;//不要拿原指標計算 int i = 0; while (r->next) { i++; r = r->next; } return i; } //遍歷線性表 void TraverseList(List *l) { List *r = l; printf("連結串列中的元素依次為:"); while (r->next) { r = r->next; printf("%d ", r->data); } printf("\n"); } //查詢連結串列中某結點資料是否存在 int Find(List *l, DataType d) { int i = 1; List *r = l; r = r->next; while (r && r->data != d) { r = r->next; i++; } if (!r) return 0; else return i; } //在連結串列中插入一個新節點(在第n個節點前插入) void Insert(List *l, int n, DataType data) { int i = 0; List *p, *r = l; while (r->next && i < n-1)//尋找第n-1個節點 { r = r->next; i++; } if (r->next == NULL) printf("第%d個節點不存在", n); else { p = (List*)malloc(sizeof(List));//確定邏輯關係 p->data = data; p->next = r->next; r->next = p; } } //刪除連結串列中某一節點 void Delete(List *l, int n) { int i = 0; List *s, *r = l; while (r->next && i < n-1)//尋找第n-1個節點 { r = r->next; i++; } if (r->next == NULL) printf("第%d個節點不存在", n); else { s = r->next;//確定待刪除節點 r->next = s->next;//確定邏輯關係 free(s); } } //清空連結串列(保留頭結點,指標域為NULL) void ClearList(List *l) { List *s, *r = l; while (r->next) { s = r->next; r->next = s->next;//確定邏輯關係 free(s); } }
相關推薦
單鏈表基本操作的C語言實現(鏈式儲存結構)
#include<stdio.h> #include<stdlib.h> typedef int DataType; typedef struct Node{ DataType data; struct Node *next; }
C++ 單鏈表基本操作分析與實現 連結串列 連結串列是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過連結串列中的指標連結次序實現的。連結串列由一系列結點(連結串列中每一個元素稱為結點)組成,結
連結串列 連結串列是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過連結串列中的指標連結次序實現的。連結串列由一系列結點(連結串列中每一個元素稱為結點)組成,結點可以在執行時動態生成。每個結點包括兩個部分:一個是儲存資料元素的資料域,另一個是儲存下一個結點地址的指標域。 相比於線性表
單鏈表的基本操作c語言實現
#include<stdio.h> #define false 0 #define ok 1 //定義節點的結構 typedef struct node{ int data; struct node *next; }node; ty
線性表及其應用C語言實現(資料結構複習最全筆記)
一、順序表的表示與實現 1.線性表的順序結構定義 #define LIST_INIT_SIZE 100 //線性表儲存空間的初始分配量 #define LISTINCREMENT 10 //線性表儲存空間的分配增量 typedef struct { ElemType* el
單鏈表結點刪除 C語言實現
實現程式碼: #include<stdlib.h> #include<stdio.h> #define N 15 typedef struct linklist {
演算法與資料結構-棧的基本操作C語言實現
序言 複習棧的基本操作及其C語言實現,主要以鏈式棧為例。 本文將介紹棧的以下基本操作: 棧的建立(順序棧和鏈式棧) 棧的初始化 棧遍歷 棧清空/銷燬 判斷棧是否為空 求棧的長度 返回並刪除棧頂元素 1. 棧建立 - 順序棧和鏈式棧 //順序棧的
字串的基本操作,c語言實現
話不多說,直接上程式碼。如果有什麼錯誤,直接噴! #include <stdio.h> #include <stdlib.h> #define LEN 100 #define LENINC 10 int main() { char strin
演算法與資料結構-佇列的基本操作C語言實現
序言 佇列有順序佇列和鏈式佇列,順序佇列通過陣列方式來實現,鏈式佇列通過連結串列方式來實現。 陣列方式實現便於資料訪問(大小和空間確定),連結串列方式實現便於資料操作(插入和刪除靈活)。 這裡介紹
處理機排程演算法C語言實現(註釋得當!!)
/* created by herbert on 10 Nov */ #include <iostream> #include <queue> #include <algorithm> #include <c
0x00資料結構——C語言實現(棧+字尾表示式計算)
0x00資料結構——C語言實現(棧) 棧的實現 /* 棧(tack)是限制插入和刪除只能在一個位置上進行的表,該位置是表的末端,叫做棧的頂(top)。 對棧的基本操作有Push(進棧)和Pop(出棧)。 Functions: (在連結串列中增加
佇列的C語言實現(通過核心連結串列)
0. 環境說明 本文的實驗環境是: win7作業系統+Keil 5 IDE. 非常適合嵌入式軟體開發 1. 打造自己的“list.h” 在微控制器程式開發中,有時候會用到佇列。能否設計一個通用的佇列呢?我想,可以把核心連結串列用起來。 以下程式碼是我
資料結構C語言實現之鏈式佇列的6種演算法程式碼
#include <stdio.h>#include <stdlib.h>typedef int elemType;/************************************************************************//* 以下是關於佇列連
順序表的基本操作及C語言實現(詳解版)
我們學習了順序表及初始化的過程,本節學習有關順序表的一些基本操作,以及如何使用 C 語言實現它們。 順序表插入元素 向已有順序表中插入資料元素,根據插入位置的不同,可分為以下 3 種情況: 插入到順序表的表頭; 在表的中間位置插入元素; 尾隨順序表中已有元素,作為順序表中的最後一個元素; 雖然資
資料結構(c語言)——線性單鏈表基本操作
#include <stdio.h> #include <stdlib.h> typedef int Element; typedef char(*Status)[10]; #define ERROR "error" #define OK "ok"
《資料結構與演算法》-單鏈表基本操作的C語言實現
最近在學演算法內容,發現很多演算法依賴於基本的資料結構,所以從新溫習資料結構,記錄一下,以後知識點忘記可以提醒自己哪裡比較容易出錯。 所用教材《資料結構與演算法分析》by Mark Allen Weiss 《資料結構》(C語言
資料結構(一):順序表的基本操作 C語言
順序表 標頭檔案: Sqlist.h #include<stdio.h> #include<stdlib.h> #define SIZE 15 #pragma once typedef struct Sqlist { int elem[SIZ
c++學習筆記—單鏈表基本操作的實現
用c++語言實現的單鏈表基本操作,包括單鏈表的建立(包括頭插法和尾插法建表)、結點的查詢、刪除、排序、列印輸出、逆置、連結串列銷燬等基本操作。 IDE:vs2013 具體實現程式碼如下: #include "stdafx.h" #include <malloc.h
c++實現單鏈表基本操作
程式媛決定好好學習寫程式碼 連結串列是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過連結串列中的指標連結次序實現的。連結串列由一系列結點(連結串列中每一個元素稱為結點)組成,結點可以在執行時動態生成。每個結點包括兩個部分:一個是儲存資料元素的資料域,
鏈表的基本操作java語言實現
auth ndb ack pan log 定義 pac ext col package com.baorant; public class JavaDemo { public static void main(String[] args) {
在STM32上實現NTFS之4:GPT分區表的C語言實現(1):主GPT表頭的實現
center mbr分區 sum 對齊 字節數 決定 容器 alt 水平 題外話:在荒廢了很久沒有更新之後……某日突然收到讀者的站內信!內容大體是詢問GPT分區表信息的讀取方式,筆者激動萬分之下,決定繼續解剖NTFS……其實GPT嚴格上不算是NTFS的內容, GPT和M