2020.10.07
一、今日学习内容
学习了线性表的增删改查
#include<iostream> using namespace std; #define LIST_INIT_SIZE 100 #define ERROR -1 #define OK 1 typedef int status; typedef struct LNode{ int data; struct LNode *next; }LNode,*LinkList; status InitList_L(LinkList &L){ //初始化 L=new LNode; L->next=NULL; return OK; } status GetElem_L(LinkList L,int i,int &e){ //获取 LinkList p; int j=1; p=L->next; while(p&&j<i){ p=p->next; ++j; } if(!p||j>i)return ERROR; e=p->data; return OK; } status LocateElem_L(LinkList L,int e){ //查找值为e的元素 LinkList p; int j=1; p=L->next; while(p&&p->data!=e){ p=p->next; j++; } return j; } status ListInsert_L(LinkList &L,int i,int e){ //插入 LinkList p; p=L;int j=0; while(p&&j<i-1){ p=p->next; ++j; } if(!p||j>i-1)return ERROR; LinkList s=new LNode; s->data=e; s->next=p->next; p->next=s; return OK; } status ListDelete_L(LinkList &L,int i,int &e){ //删除 LinkList p,q; p=L;int j=0; while(p->next&&j<i-1){ p=p->next; ++j; } if(!p->next||j>i-1)return ERROR; q=p->next; p->next=q->next; e=q->data; delete q; return OK; } void CreateList_F1(LinkList &L,int n){ //前插法 L=new LNode; L->next=NULL; for(int i=n;i>0;i--){ LinkList p=new LNode; cin>>p->data; p->next=L->next; L->next=p; } } void CreateList_F2(LinkList &L,int n){ //尾插法 L=new LNode; L->next=NULL; LinkList r,p; r=L; for(int i=0;i<n;i++) { p=new LNode; cin>>p->data; p->next=NULL; r->next=p; r=p; } } status PrintList(LinkList &L){ //输出 LinkList a = L->next ; while(a!=NULL){ cout<<a->data<<" "; a=a->next ; } cout<<endl; return OK ; } int main() { LinkList L; InitList_L(L); int i,e,n,m; int f=1; do{ cout<<"*******************************"<<endl; cout<<" 0.遍历 "<<endl; cout<<" 1.获取数据 "<<endl; cout<<" 2.获取位置 "<<endl; cout<<" 3.插入 "<<endl; cout<<" 4.删除 "<<endl; cout<<" 5.退出 "<<endl; cout<<"*******************************"<<endl; cout<<"请选择:"; cin>>n; switch(n) { case 0: PrintList(L); break; case 1: cout<<"请输入你要获取第几个数据:"; cin>>i; GetElem_L(L,i,e); cout<<"其数据为:"<<e<<endl; break; case 2: cout<<"请输入你要查找的数据:"; cin>>e; if(LocateElem_L(L,e)!=0) { cout<<"该数在第"<<LocateElem_L(L,e)<<"个"<<endl; } break; case 3: if(!L->next){ cout<<"请输入要插入的数据个数:"; cin>>m; CreateList_F2(L,m);break;} if(L->next){ PrintList(L); cout<<"请输入要插入的位置:"; cin>>i; cout<<"请输入要插入的数据:"; cin>>e; ListInsert_L(L,i,e); } break; case 4: cout<<"请输入要删除数据的位置:"; cin>>i; ListDelete_L(L,i,e); cout<<"删除数据的值为:"<<e<<endl; break; case 5:f=2; } }while(f!=2); }
二、遇到的问题
对于链表的原理不是很清楚,通过看书、百度搜索,弄明白了
三、明日计划
继续学习Java