logo资料库

数据结构单链表的创建,插入,修改,查找以及删除.docx

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
//单链表代码 #include #include using namespace std; //单链表的存储结构 typedef struct LNode { int DATE; LNode *Next; //结点的数据域 //结点的指针域 }Lnode, *LinkList; void InitList(LinkList &L) { //初始化 L = new LNode; L->Next = NULL; } void Creat_LinkList2(LinkList &L) //尾插法创建单链表 { L = new LNode; L->Next = NULL; LinkList r = new LNode; r = L; while (r->Next != NULL) //尾指针r指向头结点 r = r->Next; cout << "输入多少个数据" << endl; int x; cin >> x; for (int i = 0; i < x; i++) { LinkList S; S = new LNode;//生成新结点 int a; cin >> a; S->DATE = a; //输人元素值赋给新结点*p的数据域 S->Next = NULL; r->Next = S; //将新结点*S插人尾结点*r之后 r = S; //r指向新的尾结点*S } } void ListSize(LinkList L) { //求单链表长度 LinkList q = L->Next; int i = 0; while (q != NULL) { q = q->Next; i++; } cout << "长度为 " << i << endl; }
void ListInsert_L(LinkList L, int x) { //取元素 int i = 0; while (i < x&&L != NULL) { L = L->Next; i++; } cout << "取出的元素为 " << L->DATE << endl; } void ListDelete_L(LinkList &L, int x) {//在带有头结点的单链表L中,删除第x个元素 //删除 LinkList q; q = new LNode; q = L; int i = 0; while (i < (x - 1) && q->Next != NULL)//查找第x-1个结点,q指向该结点 { q = q->Next; i++; } LinkList p; p = new LNode; if (i == x - 1 && q->Next != NULL) { p = q->Next;//临时保存被删结点的地址以备释放 q->Next = p->Next;//改变删除结点的前驱结点的指针域 delete p;//释放删除结点的空间 } else } cout << "输入错误" << endl; void Listset_L(LinkList &L, int x, int n) { //修改元素 int i = 0; LinkList q; q = new LNode; q = L->Next; LinkList Q; Q = new LNode; Q = L; while (i < x - 1 && q != NULL) { Q = q; q = q->Next; i++; } if (i == x - 1 && Q->Next != NULL) q->DATE = n; //实现修改 else
cout << "输入错误" << endl; } void Creat_LinkList(LinkList &L, int x, int n)//插入 { LinkList q; q = new LNode; q = L; int i = 0; while (i < (x - 1) && q->Next != NULL) { q = q->Next; i++; } if (i + 1 == x && x != 0 && q) { LinkList p; p = new LNode; p->DATE = n; p->Next = q->Next; q->Next = p; } else } cout << "输入错误" << endl; void Print_LinkList(LinkList L) { LinkList S = L->Next; cout << "数据为 "; while (S) { cout << S->DATE << " S = S->Next; "; } cout << endl; } void Duqu(LinkList L) { cout << "取出第几个元素" << endl; int a; cin >> a; int i = 0; while (i < a&&L != NULL) { L = L->Next; i++; } if (i != 0 && L) cout << "取出的元素为 " << L->DATE << endl; else } cout << "错误" << endl;
void Xiugai(LinkList &L) { cout << "修改第几个元素" << endl; int a; cin >> a; cout << "修改元素的值" << endl; int b; cin >> b; Listset_L(L, a, b); } void Charu(LinkList &L) { cout << "在哪里插入元素" << endl; int a; cin >> a; cout << "插入元素为多少" << endl; int d; cin >> d; Creat_LinkList(L, a, d); } void Shanchu(LinkList &L) { cout << "在哪里删除元素" << endl; int e; cin >> e; ListDelete_L(L, e); } void Jianli() { LinkList L; InitList(L); while (1) { cout << "------------------------------------------" << endl; cout << "1.输入 2.输出 3.长度 4.读取元素 " << endl; cout << "5.修改元素 6.插入元素 7.删除元素 8.退出" << endl; cout << "------------------------------------------" << endl; cout << "输入你的选择:" << endl; int i; cin >> i; switch (i) { case 1: Creat_LinkList2(L); break; case 2: Print_LinkList(L); break; case 3: ListSize(L); break; case 4: Duqu(L); break; case 5: Xiugai(L); break; case 6: Charu(L); break; case 7: Shanchu(L); break; case 8: return; default:cout << "输入错误,请重试" << endl; break; } } }
void Main() { while (1) { cout << "------------------------------------------" << endl; cout << "1.建立单链表 2.退出" << endl; cout << "------------------------------------------" << endl; cout << "输入你的选择:" << endl; int i; cin >> i; switch (i) { case 1: Jianli(); break; case 2: return; default:cout << "输入错误,请重试" << endl; break; } } } int main() { Main(); }
分享到:
收藏