<input id="0qass"><u id="0qass"></u></input>
  • <input id="0qass"><u id="0qass"></u></input>
  • <menu id="0qass"><u id="0qass"></u></menu>

    數據結構-鏈表相關操作函數(C++語言實現)

    數據結構 同時被 2 個專欄收錄
    2 篇文章 0 訂閱
    3 篇文章 0 訂閱

    鏈表是一種常見的基礎數據結構,結構體指針在這里得到了充分的利用。鏈表可以動態的進行存儲分配,也就是說,鏈表是一個功能極為強大的數組,他可以在節點中定義多種數據類型,還可以根據需要隨意增添,刪除,插入節點。鏈表都有一個頭指針,一般以head來表示,存放的是一個地址。鏈表中的節點分為兩類,頭結點和一般節點,頭結點是沒有數據域的。鏈表中每個節點都分為兩部分,一個數據域,一個是指針域。說到這里你應該就明白了,鏈表就如同車鏈子一樣,head指向第一個元素:第一個元素又指向第二個元素;……,直到最后一個元素,該元素不再指向其它元素,它稱為“表尾”,它的地址部分放一個“NULL”(表示“空地址”),鏈表到此結束。

    #include<iostream>
    using namespace std;
    
    typedef struct Node{
    	int data;
    	struct Node* pNext;
    }NODE,*PNODE;
    
    //創建鏈表函數
    PNODE create_list(int len) {
    	PNODE phead = new NODE;
    	if (phead == NULL) {
    		exit(-1);
    	}
    	PNODE ptail = phead;
    	ptail->pNext = NULL;
    	cout << "請輸入存儲數據:" << endl;
    	for (int i = 0; i < len; i++) {
    		int a;
    		cin >> a;
    		PNODE pnew = new NODE;
    		if (NULL == pnew) {
    			exit(-1);
    		}
    		pnew->data = a;
    		ptail->pNext = pnew;
    		pnew->pNext = NULL;
    		ptail = pnew;
    	}
    	return phead;
    }
    //求鏈表的長度函數
    int length_list(PNODE phead) {
    	PNODE p = phead->pNext;
    	int len = 0;
    	while (p != NULL) {
    		p = p->pNext;
    		len++;
    	}
    	return len;
    }
    //遍歷鏈表函數
    void traverse_list(PNODE phead) {
    	PNODE p = phead->pNext;
    	while (p != NULL) {
    		cout << p->data<<" ";
    		p = p->pNext;
    	}
    	cout << endl;
    }
    //鏈表排序函數
    void sort_list(PNODE phead) {
    	int len = length_list(phead);
    	PNODE p,q;
    	int i, j;
    	for (p= phead->pNext, i = 0, p; i < len - 1; i++, p=p->pNext) {
    		for (j = 0, q = p->pNext; j < len - i - 1; q = q->pNext, j++) {
    			if (p->data > q->data) {
    				int temp = p->data;
    				p->data = q->data;
    				q->data = temp;
    			}
    		}
    	}
    	cout << endl;
    }
    //鏈表中插入數據函數
    bool insert_list(PNODE phead, int pos, int val) {
    	PNODE p = phead;
    	int i = 0;
    	while (p != NULL && i < pos - 1) {
    		p = p->pNext;
    		i++;
    	}
    	if (p == NULL) {
    		return false;
    	}
    	PNODE pnew = new NODE;
    	if (pnew == NULL) {
    		cout << "動態內存分配失敗" << endl;
    		exit(-1);
    	}
    	pnew->data = val;
    	PNODE q = p->pNext;
    	p->pNext=pnew;
    	pnew->pNext = q;
    	return true;
    }
    //鏈表中刪除數據函數
    bool delete_list(PNODE phead, int pos, int *val) {
    	PNODE p = phead;
    	int i = 0;
    	while (p != NULL && i < pos - 1) {
    		p = p->pNext;
    		i++;
    	}
    	if (p == NULL) {
    		return false;
    	}
    	PNODE q = p->pNext;
    	*val = q->data;
    	p->pNext = q->pNext;
    	delete q;
    	return true;
    }
    int main() {
    	int len;
    	cout << "輸入構建鏈表的長度;" << endl;
    	cin >> len;
    	PNODE p = create_list(len);
    	cout << "您構建的鏈表為:"<< endl;
    	traverse_list(p);
    	int l = length_list(p);
    	//cout << "您構建的鏈表長度為:" <<l<< endl;
    	sort_list(p);
    	cout << "排序后的鏈表為:" << endl;
    	traverse_list(p);
    	insert_list(p, 5, 0);
    	cout << "在第五個位置插入數據0后的鏈表為:" << endl;
    	traverse_list(p);
    	int val;
    	delete_list(p, 2, &val);
    	cout << "刪除第二個位置的數據后的鏈表為:" << endl;
    	cout << "刪除第二個位置的數據為:" << val<<endl;
    	traverse_list(p);
    	sort_list(p);
    	cout << "重新對該鏈表進行排序得到鏈表為:" << endl;
    	traverse_list(p);
    	return 0;
    }
    
    • 1
      點贊
    • 1
      評論
    • 1
      收藏
    • 打賞
      打賞
    • 掃一掃,分享海報

    評論 1 您還未登錄,請先 登錄 后發表或查看評論
    ??2022 CSDN 皮膚主題:大白 設計師:CSDN官方博客 返回首頁

    打賞作者

    小饅頭的yy

    你的鼓勵將是我創作的最大動力

    ¥2 ¥4 ¥6 ¥10 ¥20
    輸入1-500的整數
    余額支付 (余額:-- )
    掃碼支付
    掃碼支付:¥2
    獲取中
    掃碼支付

    您的余額不足,請更換掃碼支付或充值

    打賞作者

    實付
    使用余額支付
    點擊重新獲取
    掃碼支付
    錢包余額 0

    抵扣說明:

    1.余額是錢包充值的虛擬貨幣,按照1:1的比例進行支付金額的抵扣。
    2.余額無法直接購買下載,可以購買VIP、C幣套餐、付費專欄及課程。

    余額充值
    多乐彩