Computer >> Máy Tính >  >> Lập trình >> C ++

Chương trình C ++ để triển khai danh sách liên kết đôi thông tư

Trong cấu trúc dữ liệu Danh sách liên kết là một tập hợp tuyến tính của các phần tử dữ liệu. Mỗi phần tử hoặc nút của danh sách bao gồm hai mục - dữ liệu và tham chiếu đến nút tiếp theo. Nút cuối cùng có tham chiếu đến null. Trong danh sách được liên kết, điểm nhập được gọi là đầu danh sách.

Trong Danh sách liên kết đôi thông tư, hai phần tử liên tiếp được liên kết hoặc kết nối bằng con trỏ trước đó và tiếp theo và nút cuối cùng trỏ đến nút đầu tiên bằng con trỏ tiếp theo và nút đầu tiên cũng trỏ đến nút cuối cùng bằng con trỏ trước đó.

Thuật toán

 Begin Chúng ta sẽ tạo một danh sách tuần hoàn lớp có các chức năng sau:gật đầu * create_node (int) =Đến bộ nhớ được cấp phát động cho nút. insert_begin () =Chèn các phần tử vào đầu danh sách. A) Nếu danh sách trống, hãy chèn nút và đặt con trỏ tiếp theo và con trỏ trước đó là NULL. B) Nếu danh sách không trống, hãy chèn dữ liệu và đặt con trỏ tiếp theo và con trỏ trước đó và cập nhật chúng. insert_end () =Để Chèn các phần tử vào cuối danh sách:A) Nếu danh sách trống, hãy tạo một nút dưới dạng danh sách kép hình tròn. B) Tìm nút cuối cùng. C) Tạo nút động. D) Bắt đầu trở thành nút tiếp theo của nút mới. E) Tạo nút mới làm nút trước đó. F) Thực hiện lần cuối cùng trước của nút mới. G) Tạo nút mới bên cạnh nút cũ cuối cùng. insert_pos () =Để chèn các phần tử vào vị trí xác định của danh sách:A) Chèn dữ liệu. B) Nhập vị trí mà phần tử sẽ được chèn vào. C) Nếu lúc đầu danh sách là nút chèn trống. D) Nếu danh sách không trống, tìm nút có vị trí và nút tiếp theo. E) Chèn nút giữa chúng. delete_pos () =Để xóa các phần tử khỏi vị trí xác định của danh sách:A) Nếu danh sách trống, sau đó quay trở lại. B) Nhập vị trí nút cần xóa. C) Nếu danh sách có một nút, hãy xóa nó và cập nhật các con trỏ tiếp theo và con trỏ trước đó. D) Nếu danh sách có nhiều hơn một nút, thì hãy xóa nút ở vị trí cụ thể và cập nhật con trỏ tiếp theo và con trỏ trước đó. search () =Để tìm kiếm phần tử trong danh sách:A) Nếu danh sách trống, hãy trả về. B) Nhập giá trị cần tìm. C) In ra vị trí cần tìm của phần tử. D) Nếu không tìm thấy phần tử, không tìm thấy bản in. update () =Để cập nhật giá trị tại một nút cụ thể:A) Nếu danh sách trống, hãy trả về. B) Nhập vị trí của nút cần cập nhật. C) Nhập giá trị mới. D) Cập nhật nút. display () =Để hiển thị danh sách. reverse () =Để đảo ngược danh sách.End 

Mã mẫu

 #include  #include  #include  using namespace std; struct gật {int info; struct gật * n; struct gật * p;} * start, * last; int count =0; class circleardoublylist {public:gật * create_node (int); void insert_begin (); void insert_end (); void insert_pos (); void delete_pos (); void tìm kiếm (); void cập nhật (); void display (); void ngược (); Cirardoublylist () {start =NULL; cuối cùng =NULL; }}; int main () {int c; Cirardoublylist cdl; while (1) // thực hiện thao tác chuyển đổi {cout <<"1.Insert at Beginning" <> c; switch (c) {case 1:cdl.insert_begin (); phá vỡ; trường hợp 2:cdl.insert_end (); phá vỡ; trường hợp 3:cdl.insert_pos (); phá vỡ; case 4:cdl.delete_pos (); phá vỡ; trường hợp 5:cdl.update (); phá vỡ; case 6:cdl.search (); phá vỡ; case 7:cdl.display (); phá vỡ; case 8:cdl.reverse (); phá vỡ; case 9:thoát ra (1); default:cout <<"Lựa chọn sai" < thông tin =v; t-> n =NULL; t-> p =NULL; return t;} void circleardoublylist ::insert_begin () {int v; cout <> v; struct gật * t; t =create_node (v); if (start ==last &&start ==NULL) {cout <<"Phần tử được chèn vào danh sách trống" < n =last-> n =NULL; start-> p =last-> p =NULL; } else {t-> n =start; start-> p =t; start =t; start-> p =last; last-> n =start; cout <<"Phần tử được chèn vào" <> v; struct gật * t; t =create_node (v); if (start ==last &&start ==NULL) {cout <<"Phần tử được chèn vào danh sách trống" < n =last-> n =NULL; start-> p =last-> p =NULL; } else {last-> n =t; t-> p =cuối cùng; cuối cùng =t; start-> p =last; last-> n =start; }} void circleardoublylist ::insert_pos () {int v, pos, i; cout <> v; cout <> pos; struct gật * t, * s, * ptr; t =create_node (v); if (start ==last &&start ==NULL) {if (pos ==1) {start =last =t; start-> n =last-> n =NULL; start-> p =last-> p =NULL; } else {cout <<"Vị trí nằm ngoài phạm vi" < n; if (i ==pos - 1) {ptr-> n =t; t-> p =ptr; t-> n =s; s-> p =t; cout <<"Phần tử được chèn vào" <> pos; if (count  n =s-> n; s-> n-> p =last; start =s-> n; (các) miễn phí; cout <<"Phần tử đã Xóa" < n; ptr =s-> p; } ptr-> n =s-> n; s-> n-> p =ptr; if (pos ==count) {last =ptr; } đếm--; (các) miễn phí; cout <<"Phần tử đã bị xóa" <> pos; cout <<"Nhập giá trị mới:"; cin>> v; struct gật * s; if (count  info =v; cout <<"Đã cập nhật nút" < n; } s-> thông tin =v; cout <<"Đã cập nhật nút" <> v; s =bắt đầu; for (i =0; i  info ==v) {cout <<"Element" < n; } if (! flag) cout <<"Không tìm thấy phần tử trong danh sách" < thong tin <<"<->"; s =s-> n; } cout < info < n; p1-> n =NULL; p1-> p =p2; while (p2! =start) {p2-> p =p2-> n; p2-> n =p1; p1 =p2; p2 =p2-> p; } cuối cùng =bắt đầu; start =p1; cout <<"Danh sách được đảo ngược" < 

Đầu ra

 1.Insert at Beginning2.Insert at End3.Insert at Position4.Delete at Position5.Update Node6.Search Element7.Display List8.Reverse List9.ExitNhập phần tử cần chèn:7Phần tử được chèn vào danh sách trống1. Insert at Beginning2.Insert at End3.Insert at Position4.Delete at Position5.Update Node6.Search Element7.Display List8.Reverse List9. Chèn tại Vị trí4. Xóa tại Vị trí5. Cập nhật Node6. Tìm kiếm Phần tử7. Danh sách hiển thị8. Danh sách đảo ngược9. Thoát Node6. List9.ExitNhập sự lựa chọn của bạn:76 <-> 7 <-> 4 <-> 51.Chèn tại Beginning2.Insert at End3.Chèn tại vị trí4.Xóa tại vị trí5.Update Node6. Tìm kiếm phần tử7. 21.Chèn tại Bắt đầu2. Chèn tại Kết thúc3. Chèn tại Vị trí4. Xóa tại Vị trí5. Cập nhật Node6. Tìm kiếm Phần tử7.Display List8.Reverse List9.Exit Beginning2.Insert at End3.Insert at Position4.Delete at Position5.Update Node6. Chèn tại Vị trí4. Xóa tại Vị trí5. Cập nhật Node6. Tìm kiếm Phần tử7.Display List8.Reverse List9.ExitEnter your choice:3Nhập phần tử cần chèn:5Nhập vị trí của phần tử được chèn:2Element insert1.Insert at Beginning2.Insert at End3.Insert tại Vị trí 4. Xóa tại Vị trí5. Cập nhật Node6. Element7.Display List8.Reverse List9.> 7 <-> 5 <-> 61.Chèn ở đầu, nhập vào cuối3. Chèn ở vị trí4. Xóa ở vị trí5. Cập nhật nút6.