从零开始学数据结构

    技术2022-07-10  134

    一.线性表

    2.单链表

    完整代码:

    #include <iostream> #define ERROR 0 #define OK 1 #define OVERFLOW -2 using namespace std; typedef int ElemType; typedef struct LNode{ ElemType data; struct LNode *next; }LNode,*LinkList; int InitList(LinkList &L){ L=new LNode; L->next=NULL; cout<<"初始化成功!"<<endl; return OK; }//初始化 int Output(LinkList &L,int i){ LinkList p=L->next; while(p){ cout<<p->data<<' '; p=p->next; } cout<<endl; }//输出 LNode *LocateElem(LinkList L,ElemType e){ LinkList p=L->next; while(p&&p->data!=e) p=p->next; if(p) cout<<"查找成功!"<<endl; else cout<<"查找失败!请核查是否原链表存在此值!"<<endl; }//定位 int ListInsert(LinkList &L,int i,ElemType e){ LinkList 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; }//插入 int ListDelete(LinkList &L,int i){ LinkList p=L; int j=0; while((p->next)&&(j<i-1)){ p=p->next; ++j; } if(!(p->next)||(j>i-1)) return ERROR; LinkList q=p->next; p->next=q->next; delete q; return OK; }//删除 int main(int argc, char** argv) { LNode *MYL; char a; a='Y'; int data,i,num; int key=0; InitList(MYL); cout<<"请输入元素个数:"<<endl; cin>>num; int current=num; int tar; cout<<"创建新链表~~请输入元素:"<<endl; for(int x=1;x<=num;x++){ cin>>tar; ListInsert(MYL,x,tar); } cout<<"新链表如下:"<<endl; Output(MYL,num); while(a=='Y'){ cout<<"请选择你需要的帮助(0=定位,1=插入,2=删除)"<<endl; cin>>key; if(key==0){ cout<<endl<<"请输入所需要定位的元素:"; cin>>data; LocateElem(MYL,data); } if(key==1){ cout<<endl<<"请输入要插入的元素:"; cin>>data; cout<<endl<<"请输入要插入的位置:"; cin>>i; ListInsert(MYL,i,data); current=current+1; Output(MYL,current); } if(key==2){ cout<<endl<<"请输入要删除的位置:"; cin>>i; ListDelete(MYL,i); current=current-1; Output(MYL,current); } cout<<endl<<"请问是否继续?(Y:继续 N:结束)"<<endl; getchar(); cin>>a; } return 0; }

    ps: 这些博客简单一些,算是学习数据结构的一些记录。

    Processed: 0.011, SQL: 9