1. 程式人生 > >【資料結構】c++ 實現連結串列的建立,查詢,列印,刪除,插入

【資料結構】c++ 實現連結串列的建立,查詢,列印,刪除,插入

//程式很簡單,但是要捋順邏輯關係,留著備用

#include

#include"stdafx.h"

using namespace std;

struct node

{

int data;

node* next;

};

node * created_head(node *head)

{

node * temp;

for (int i = 1; i < 10; i++)

{

temp = new node;

temp->data = i;

temp->next = head->next;

head->next = temp;

}

return head;

}

node * created_rear(node *head)

{

node *p2;

p2 = new node;

p2 = head; //保持頭節點

node * temp;

for (int i = 1; i < 10; i++)

{

temp = new node;//定義一個終端節點

temp->data = i;

//temp->next = p->next;

p2->next = temp;

temp->next = NULL;

p2 = temp;

}

return head;

}

//列印連結串列

void print_list(node *head)

{

node *temp;

temp = new node;

temp = head;

while (temp->next != NULL)

{

temp = temp->next;

cout << temp->data << "   ";

}

cout << endl;

}

//獲取連結串列長度

int leng_list(node *head)

{

node *temp;

temp = new node;

temp = head;

int leng = 0;

while (temp->next != NULL)

{

temp = temp->next;

leng++;

}

return leng;

}

//獲取連結串列第i個節點

node * get_list(node * head, int i)

{

node *temp;

temp = new node;

temp = head;

bool state = false;

int j = 1;

while (temp->next != NULL)

{

temp = temp->next;

if (j == i)

{

state =true;

break;

}

j++;

}

if (state == true)

{

cout << "索引成功" << endl;

return temp;

}

else//兩種情況, 頭指標或者,超過了連結串列的最大區間

{

cout << "超出索引範圍,返回頭結點" << endl;

return head;

}

}

//在連結串列head中第i個位置後插入節點insert

void insert_list(node *head, int i, node * insert)

{

node *temp;

temp = new node;

int leng;

leng = leng_list(head);

if ((i > 0) && (i <= leng))

{

temp = get_list(head, i);

insert->next = temp->next;

temp->next = insert;

}

else

{

cout << "超出連結串列範圍無法插入" << endl;

}

}

//刪除連結串列head第i個節點

void delete_list(node *head, int i)

{

node *temp;

temp = new node;

node *dele;

dele = new node;

int leng;

leng = leng_list(head);

if ((i > 0) && (i <= leng))

{

temp = get_list(head, i-1);

dele = temp->next;

temp->next = dele->next;

delete dele;

}

else

{

cout << "超出連結串列範圍無法刪除" << endl;

}

}

void main()

{

node *head1;

node *head2;

head1 = new node;

head2 = new node;

head1->next = NULL;

head2->next = NULL;

cout << "***************" << "頭插法新建連結串列head1" << "***************" << endl;

created_head(head1);

print_list(head1);

cout << "***************" << "尾插法新建連結串列head2" << "***************" << endl;

created_rear(head2);

print_list(head2);

cout << endl;

cout << "***************" << "連結串列head1 長度" << "***************" << endl;

cout << leng_list(head1) << endl;

cout << "***************" << "連結串列head1 第五個節點" << "***************" << endl;

cout << get_list(head1, 5)->data << endl;

node * insert;

insert = new node;

insert->data = 21;

cout << "***************" << "head1在第2節點後插入節點insert->data = 21" << "***************" << endl;

insert_list(head1,2 , insert);

print_list(head1);

cout << "***************" << "當前連結串列head1的長度" << "***************" << endl;

cout << leng_list(head1) << endl;

cout << "***************" << "刪除head1的第5個元素" << "***************" << endl;

delete_list(head1, 5);

print_list(head1);

cout << "***************" << "刪除後head1的長度" << "***************" << endl;

cout << leng_list(head1) << endl;

}