使用 C++ 编程实现已排序的循环单链表


在数据结构中,链表是一个线性数据集合。列表中的每个元素或节点包括两项 - 数据和对下一个节点的引用。最后一个节点引用空。链表中的入口点称为列表头。

在单链表中,列表中的每个节点都存储一个单链表中的内容和一个指针或引用,以引用列表中的下一个节点。单链表不存储任何指向或引用上一个节点的指针。

由于它是一个已排序的单链表,因此链表中的数据项将始终保持排序。

这里有一个 C++ 程序来实现已排序的循环单链表

算法

Begin
   function createnode() to insert node in the list:
      It checks whether the list is empty or not. If the list is empty put the node as first element and update head.
      If list is not empty,
      It creates a newnode and inserts the number in the data field of the newnode.
      Now the newnode will be inserted in such a way that linked list will remain sorted.
      If it gets inserted at the last, then the newnode points to the head.
      If the newnode inserted at the first, then the linked list starts from there.
End
Begin
   function display() to print the list content having n number of nodes:
      Initialize c = 0.
      Initialize pointer variable with the start address
      while (c <= n)
         Print the node info
         Update pointer variable
         Increment c.
End

示例代码

#include<iostream>
using namespace std;
struct nod {
   int d;
   nod *n;
}
*p = NULL, *head = NULL, *q = NULL, *np = NULL;
int c = 0;
void createnode(int n) {
   np = new nod;
   np->d = n;
   np->n = NULL;
   if (c == 0) {
      head = np;
      p = head;
      p->n = head;
      c++;
   } else if (c == 1) {
      p = head;
      q = p;
      if (np->d < p->d) {
         np->n = p;
         head = np;
         p->n = np;
      } else if (np->d > p->d) {
         p->n = np;
         np->n = head;
      }
      c++;
   } else {
      p = head;
      q = p;
      if (np->d < p->d) {
         np->n = p;
         head = np;
         do {
            p = p->n;
         }
         while (p->n != q);
         p->n = head;
      } else if (np->d > p->d) {
         while (p->n != head && q->d < np->d) {
            q = p;
            p = p->n;
            if (p->n == head) {
               p->n = np;
               np->n = head;
            } else if (np->d< p->d) {
               q->n = np;
               np->n = p;
               break;
            }
         }
      }
   }
}
void display(int i) {
   nod *t = head;
   int c = 0;
   while (c <= i ) {
      cout<<t->d<<"\t";
      t = t->n;
      c++;
   }
}
int main() {
   int i = 0, n, a;
   cout<<"enter the no of nodes\n";
   cin>>n;
   while (i < n) {
      cout<<"\nenter value of node\n";
      cin>>a;
      createnode(a);
      i++;
   }
   cout<<"sorted circularly singly link list"<<endl;
   display(n);
}

输出

enter the no of nodes
5
enter value of node
6
enter value of node
4
enter value of node
7
enter value of node
3
enter value of node
2
sorted circularly singly link list
2 3 4 6 7 2

更新日期: 2019-7-30

438 次浏览

开启你的 职业

完成课程,获得认证

开始
广告