日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

大话数据结构02 :线性表链式存储 C++

發布時間:2023/12/20 c/c++ 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大话数据结构02 :线性表链式存储 C++ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、鏈表插入和刪除等操作

關鍵是要找到插入元素的前一個元素 Status ListInsert(LinkList L, int i, ElemType e) {LinkList N = new Node();N->data = e;int j = 1;LinkList p = L;while ((j < i )&&(p)){p = p->next;j++;}if (!p)return ERROR; // 沒有這么長的表N->next = p->next; //后繼給Np->next = N; // N作為新的后繼 }

2 、完整代碼

#include "stdio.h" #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0#define MAXSIZE 20 /* 存儲空間初始分配量 */typedef int Status;/* Status是函數的類型,其值是函數結果狀態代碼,如OK等 */ typedef int ElemType;/* ElemType類型根據實際情況而定,這里假設為int */Status visit(ElemType c) {printf("%d ", c);return OK; }typedef struct Node {ElemType data;struct Node* next; }Node; typedef struct Node *LinkList; /* 定義LinkList *///初始化順序線性表 Status InitList(LinkList *L) {*L = new Node();(*L)->next = NULL;return OK; }// 判斷鏈表是否為空 Status ListEmpty(LinkList L) {if (L->next)return FALSE;elsereturn TRUE; }//將L重置為空表 Status ClearList(LinkList *L) {LinkList p, q;p = (*L)->next;while (p){q = p->next;delete p;p = q;}(*L)->next = NULL;return OK; }//返回L中的元素個數 int ListLength(LinkList L) {int i = 0;LinkList p = L->next;while (p){i++;p = p->next;}return i; }// 用e返回L中第i個元素的值Status GetElem(LinkList L, int i, ElemType* e) {int j = 1;LinkList p;p = L->next;while (p && j < i){p = p->next;j++;}if (!p || j > i)return ERROR;*e = p->data;return OK; }// 尋找第 1個 與e滿足關系的數據元素的位置 int LocateElem(LinkList L, ElemType e) {int i = 0;LinkList p = L->next;while (p){i++;if (p->data == e)return i;p = p->next;}return 0; //沒有這個元素 }//在第i個位置中插入新的數據元素 //鏈表插入 關鍵是找要插入的位置的前一個位置的元素 Status ListInsert(LinkList *L, int i, ElemType e) {LinkList N = new Node();N->data = e;int j = 1;LinkList p = *L;while ((j < i )&&(p)){p = p->next;j++;}if (!p)return ERROR; // 沒有這么長的表N->next = p->next; //后繼給Np->next = N; // N作為新的后繼 }//刪除L的第i個元素 并用e返回其值Status ListDelete(LinkList *L, int i, ElemType* e) {int j = 1;LinkList p = (*L);LinkList q;while ((p->next) && (j < i)){p = p->next;j++;}if (!p->next)return ERROR; // 沒有這個元素*e = p->next->data;q = p->next; //要釋放的元素p->next = p->next->next; //將釋放元素的后繼連接到前面delete q;return OK; }//依次輸出L的每個數據元素Status ListTraverse(LinkList L) {LinkList p = L->next;while (p){visit(p->data);p = p->next;}printf("\n");return OK; }//隨機產生n個元素的值,建立帶表頭節點的單鏈線性表 L(尾插法) void CreateListTail(LinkList *L, int n) {//生成1-10 數字并且存入到鏈表中LinkList p = *L;for (int i = 0; i < n; i++){Node* N = new Node();N->data = i;p->next = N; //將新的數據加入到尾巴p = p->next; //當前指針往后走一步p->next = NULL; //表示當前鏈表結束} }//隨機產生n個元素的值,建立帶表頭節點的單鏈線性表 L(頭插法) void CreateListHead(LinkList *L, int n) {//生成1-10 數字并且存入到鏈表中LinkList p = (*L)->next;for (int i = 0; i < n; i++){Node* N = new Node();N->data = i;N->next = p; //將第一個指針放到后面(*L)->next = N; //新的第一個元素p = N; //表頭指針} }int main() {LinkList L = NULL;ElemType e;Status i;int j;int k;i = InitList(&L);printf("初始化后:ListLength(L) = %d \n", ListLength(L));for (int j = 1; j <= 5; j++){int i = ListInsert(&L, 1, j);}printf("在L的表頭依次插入1~5后:L.data=");ListTraverse(L);printf("ListLength(L)=%d \n", ListLength(L));i = ListEmpty(L);printf("L是否空:i=%d(1:是 0:否)\n", i);i = ClearList(&L);printf("清空L后:ListLength(L)=%d\n", ListLength(L));i = ListEmpty(L);printf("L是否空:i=%d(1:是 0:否)\n", i);for (int j = 1; j <= 10; j++)ListInsert(&L, j, j);printf("在L的表尾依次插入1~10后:L.data=");ListTraverse(L);printf("ListLength(L)=%d \n", ListLength(L));ListInsert(&L, 1, 0);printf("在L的表頭插入0后:L.data=");ListTraverse(L);printf("ListLength(L)=%d \n", ListLength(L));GetElem(L, 5, &e);printf("第5個元素的值為:%d\n", e);for (int j = 3; j <= 4; j++){k = LocateElem(L, j);if (k)printf("第%d個元素的值為%d\n", k, j);elseprintf("沒有值為%d的元素\n", j);}k = ListLength(L); /* k為表長 */for (int j = k + 1; j >= k; j--){i = ListDelete(&L, j, &e); /* 刪除第j個數據 */if (i == ERROR)printf("刪除第%d個數據失敗\n", j);elseprintf("刪除第%d個的元素值為:%d\n", j, e);}printf("依次輸出L的元素:");ListTraverse(L);j = 5;ListDelete(&L, j, &e); /* 刪除第5個數據 */printf("刪除第%d個的元素值為:%d\n", j, e);printf("依次輸出L的元素:");ListTraverse(L);i = ClearList(&L);printf("\n清空L后:ListLength(L)=%d\n", ListLength(L));CreateListHead(&L, 20);printf("整體創建L的元素(頭插法):");ListTraverse(L);i = ClearList(&L);printf("\n刪除L后:ListLength(L)=%d\n", ListLength(L));CreateListTail(&L, 20);printf("整體創建L的元素(尾插法):");ListTraverse(L);}

總結

以上是生活随笔為你收集整理的大话数据结构02 :线性表链式存储 C++的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。