赞
踩
利用链表操作实现的链表数据管理系统:
- #include<iostream>
- #include "myfun.h"
- using namespace std;
- enum Status{
- OK = true,
- ERROR = false
- };
- typedef struct LNode{
- int data;
- LNode* next;
- }L,*LinkList;
- Status Print_LS(LinkList L);
- Status Create_LS(LinkList L,const int N);
- void Init_L(LinkList L);
- Status Insert_LS(LinkList& L,const int i);
- Status Delete_LS(LinkList& L,const int i);
- Status Search_LS(LinkList L,const int data,int& e);
- Status Change_LS(LinkList& L,const int data1,const int data2);
-
- int main(void){
- cout << "程序规则如下:" << endl;
- cout << "1.链表值为1~100之间的随机数" << endl;
- cout << "2.输入show:则输出链表" << endl;
- cout << "3.输入insert i:则在i下标后插入一个随机数" << endl;
- cout << "4.输入delete i:则删除第i个元素(注意不是下标)" << endl;
- cout << "5.输入search n:则输出n在链表中的下标" << endl;
- cout << "6.输入change m n:则将链表中的元素m改为n" << endl;
- srand(time(0));
- LinkList L = new LNode;
- Init_L(L);
- Create_LS(L,9); //在初始节点后面插入 9 个节点
- Print_LS(L);
- string str;
- cout << "请输入操作指令:";
- while (cin >> str){
- if (str == "show"){
- Print_LS(L);
- cout << "********************" << endl;
- }
- else if (str == "insert"){
- int i;cin >> i;
- if (Insert_LS(L,i)){
- cout << "insert OK" << endl;
- cout << "********************" << endl;
- }
- else{
- cout << "insert fail!" << endl;
- cout << "********************" << endl;
- }
- }
- else if (str == "delete"){
- int i;cin >> i;
- if (Delete_LS(L,i)){
- cout << "delete OK" << endl;
- }
- else{
- cout << "delete fail!" << endl;
- }
- }
- else if (str == "search"){
- int data,e;
- cin >> data;
- if (Search_LS(L,data,e)){
- cout << "search OK!\nThe Index: " << e << endl;
- }
- else{
- cout << "search fail!" << endl;
- }
- cout << "********************" << endl;
- }
- else if (str == "change"){
- int data1,data2;
- cin >> data1 >> data2;
- if (Change_LS(L,data1,data2)){
- cout << "change OK" << endl;
- }
- else {
- cout << "change fail!" << endl;
- }
- cout << "********************" << endl;
- }
- cout << "请输入操作指令:";
- }
- return 1;
- };
-
-
-
- void Init_L(LinkList L){
- L->data = randint(1,100);
- L->next = NULL;
- }
- Status Print_LS(LinkList L){
- LinkList p = L;
- int i = 0;
- cout << "元素:";
- while (p){
- i++;
- printf("%-3d",p->data);
- p = p->next;
- }
- cout << endl;
- cout << "索引:";
- for (int j=0;j<i;j++){
- printf("%-3d",j);
- }
- cout << endl;
- cout << "序号:";
- for (int j=0;j<i;j++){
- printf("%-3d",j+1);
- }
- cout << endl;
- return OK;
- }
- Status Search_LS(LinkList L,const int data,int& e){ //寻找第一个出现data的下标
- int i = 0;
- LinkList cur = L;
- while (cur){
- if (cur->data == data){
- break;
- }
- i++;
- cur = cur->next;
- }
- if (!cur){
- return ERROR;
- }
- e = i;
- return OK;
- }
- Status Create_LS(LinkList L,const int N){
- LinkList p,cur;
- p = L;
- cur = L;
- cout << "随机生成链表成功!" << endl;
- for (int i=0;i<N;i++){
- p = new LNode;
- p->data = randint(1,100);
- cur->next = p;
- cur = p;
- }
- if (cur == NULL){
- return ERROR;
- }
- p->next = NULL;
- return OK;
- }
- Status Insert_LS(LinkList& L,const int i){
- int j = 0;
- LinkList cur = L;
- if (i < 1){
- LinkList newL = new LNode;
- Init_L(newL);
- newL->next = L;
- L = newL;
- return OK;
- }
- while (j < i-1 && cur->next){
- cur = cur->next;
- j++;
- }
- LinkList newL = new LNode;
- Init_L(newL);
- newL->next = cur->next;
- cur->next = newL;
- return OK;
- }
- Status Delete_LS(LinkList& L,const int i){
- int j = 0;
- LinkList cur = L;
- if (i < 1){
- return ERROR;
- }
- else if(i == 1){
- L = cur->next;
- delete cur;
- return OK;
- }
- while (j < i-2){
- if (!(cur->next->next)){ //一个神奇的判断越界魔法代码<( ̄︶ ̄)↗
- return ERROR;
- }
- cur = cur->next;
- j++;
- }
- LinkList delCur = cur->next;
- cur->next = delCur->next;
- delete delCur;
- return OK;
- }
- Status Change_LS(LinkList& L,const int data1,const int data2){
- LinkList cur = L;
- while (cur){
- if (cur->data == data1){
- cur->data = data2; //改
- return OK;
- }
- }
- return ERROR;
- }
-
-
myfun.h头文件往下翻
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/846379
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。