前言:
此时我们对“双向链表java实现”大概比较关怀,我们都需要了解一些“双向链表java实现”的相关资讯。那么小编在网络上收集了一些关于“双向链表java实现””的相关内容,希望小伙伴们能喜欢,小伙伴们快快来学习一下吧!// 双向循环链表实现.cpp : 定义控制台应用程序的入口点。 #include<iostream>#include<stdio.h>#include<math.h>#define LEN sizeof(struct DSCriculist)using namespace std;typedef struct DSCriculist //定义结构体{ int data; //数据域 struct DSCriculist *prior;//前向指针域 struct DSCriculist *next; //后向指针域}DSCriculist;//函数声明部分void Error(char* s);//错误处理函数DSCriculist *Creat_DSCriculist(); //创建双向循环链表DSCriculist *Find_DSCriculist(DSCriculist & L, int i);//查找双向循环链表中第i个结点void Insert_DSCriculist(DSCriculist & L, int i, int e);//向双向循环链表中位置i处插入数据域为e的结点void Delete_DSCriculist(DSCriculist & L, int i, int e);//删除双向循环链表中第i个结点,并用e返回该结点数据域的值void Search_DSCriculist(DSCriculist &L, int e);//查找双向循环链表中数据域为e的结点,并输出int Getlength_DSCriculist(DSCriculist & L);//计算上相循环链表的长度void Print_DSCriculist(DSCriculist &L);//以此输出双向循环链表的数据域的值//函数定义部分void Error(char *s) //错误处理函数{ cout << s << endl; exit(1);} DSCriculist *Creat_DSCriculist(){ DSCriculist *head, *tail, *ptr; int length = 0; int number = 0; head = (struct DSCriculist*)malloc(LEN); if (NULL == head) Error("内存分配失败!"); head->data = 0; head->next = head; head->prior = head; tail = head; cout << "请输入链表长度:"; cin >> length; cout << "请输入链表数据:" << endl; for (int i = 0; i < length; i++) { ptr = (struct DSCriculist*)malloc(LEN); if (NULL == ptr) Error("内存分配失败!"); cin >> number; ptr->data = number; tail->next = ptr; ptr->prior = tail; ptr->next = head; head->prior = ptr; tail = ptr; } cout << "双向链表创建成功!" << endl; return head;} DSCriculist *Find_DSCriculist(DSCriculist & L, int i){ DSCriculist *prev = L.next; int j = 1; while ((prev != &L) && (j < i)) { prev = prev->next; j++; } return prev;} void Insert_DSCriculist(DSCriculist & L, int i, int e){ DSCriculist *prev = Find_DSCriculist(L, i); DSCriculist *ptr = (struct DSCriculist*)malloc(LEN); if (NULL == ptr) Error("内存分配失败!"); ptr->data = e; prev->prior->next = ptr; ptr->next = prev; prev->prior = ptr; ptr->prior = prev->prior;}void Delete_DSCriculist(DSCriculist & L, int i, int e)//删除双向循环链表中第i个结点,并用e返回该结点数据域的值{ DSCriculist *prev = Find_DSCriculist(L, i); e = prev->data; if (prev->next == &L) { DSCriculist *pt = prev->prior; pt->next = &L; } else { prev->prior->next = prev->next; prev->next->prior = prev->prior; } cout << "删除的元素是:" << e << endl;; delete prev;}void Search_DSCriculist(DSCriculist &L, int e)//查找双向循环链表中数据域为e的结点,并输出该节点的位置{ DSCriculist *prev = L.next; if (prev == &L) Error("位置错误!"); int k = 1; while ((prev->next != &L) && (prev->data != e)) { prev = prev->next; k++; } cout << "该元素在链表中的位置是:" << k << endl;} int Getlength_DSCriculist(DSCriculist & L){ DSCriculist *prev = &L; int length = 0; while (prev->next != &L) { prev = prev->next; length++; } return length;}void Print_DSCriculist(DSCriculist &L){ DSCriculist *prev = L.next; if (prev == &L) Error("该链表为空表!"); cout << "该链表数据是:" << endl; while (prev->next!= &L) { cout << prev->data << " "; prev = prev->next; } cout << endl;} int main(){ DSCriculist *p = NULL; int m, n, t, q; int e = 0; p = Creat_DSCriculist(); Print_DSCriculist(*p); cout << "该链表的长度是:" << Getlength_DSCriculist(*p) << endl; cout << "请输入你要插入的位置:"; cin >> m; cout << "请输入你要插入的元素:"; cin >> n; Insert_DSCriculist(*p, m, n); Print_DSCriculist(*p); cout << "插入后的链表的长度是:" << Getlength_DSCriculist(*p) << endl; cout << "请输入你要删除的位置:"; cin >> q; Delete_DSCriculist(*p, q, e); Print_DSCriculist(*p); cout << "删除后的链表的长度是:" << Getlength_DSCriculist(*p) << endl; cout << "请输入要查找的元素:"; cin >> t; Search_DSCriculist(*p, t); return 0;}
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #双向链表java实现 #双向链表的实现