线性表链式表示和实现
2015-11-22 22:49
351 查看
#include<stdio.h> #include <conio.h> #include<stdlib.h> #include<iostream.h> #define OK 1 #define ERROR 0 typedef int ElemType; typedef int Status; typedef struct LNode { ElemType data; struct LNode *next; }LNode,*LinkList; void InitList(LinkList &L) { L=new LNode; if(L==NULL) { cerr<<"存储分配错误!"<<endl; exit(1); } L->next=NULL; } /*后插法建立单链表*/ void CreateList_R(LinkList &L,int n) { L=new LNode; L->next=NULL; LNode *p; LNode *r; r=L; for(int i=0;i<n;++i) { p=new LNode; cin>>p->data; p->next=NULL; r->next=p; r=p; } } /*前插法建立单链表*/ void CreateList_H(LinkList &L,int n) { L=new LNode; L->next=NULL; LNode *p; for(int i=0;i<n;++i) { p=new LNode; cin>>p->data; p->next=L->next; L->next=p; } } /*单链表的插入*/ Status ListInsert(LinkList &L,int i,ElemType e) { LNode *p,*s;int j; p=L;j=0; while(p&&(j<i-1)) { p=p->next; ++j; } if(!p||j>i-1) return ERROR; s=new LNode; s->data=e; s->next=p->next; p->next=s; return OK; } /*单链表的删除*/ Status ListDelete(LinkList &L,int i) { LNode *p,*q;int j; p=L;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; delete q; return OK; } /*输出链表*/ void Output(LinkList L) { while(L->next!=NULL) { cout<<L->next->data<<" "; L=L->next; } } /*单链表按值查找*/ LNode *LocateElem(LinkList L,ElemType e) { LNode *p; p=L->next; while(p&&p->data!=e) p=p->next; return p; } void main() { char ch; int a,b,c,e,i,n,m; LinkList LA; InitList(LA); do{ cout<<"请输入LA的长度:"<<endl; cin>>a; cout<<"请输入选择:1.顺序输入 2.逆序输入"<<endl; cin>>c; if(c==1) { cout<<"请按顺序输入LA的元素:"<<endl; CreateList_R(LA,a); } if(c==2) { cout<<"请按逆序输入LA的元素:"<<endl; CreateList_H(LA,a); } cout<<"LA的元素:"<<endl; Output(LA); cout<<endl; cout<<"继续 (输入1) 退出(任意值)"<<endl; cin>>m; while(m==1) { cout<<"请输入选择:1.插入 2.删除 3.按值查找 4.退出"<<endl; cin>>b; if(b==1) { cout<<"请输入要插入的位置:"<<endl; cin>>i; cout<<"请输入要插入的元素:"<<endl; cin>>e; ListInsert(LA,i,e); cout<<"插入元素后的LA:"<<endl; Output(LA); cout<<endl; } else if(b==2) { cout<<"请输入要删除的位置:"<<endl; cin>>i; cout<<"删除元素后的LA:"<<endl; ListDelete(LA,i); Output(LA); cout<<endl; } else if(b==3) { cout<<"请输入查找的元素:"<<endl; cin>>n; printf("%p\n",LocateElem(LA,n)); } else break;} printf("是否继续?[y/n][y]"); while((ch=getchar())!='\n'); }while((ch=getchar())=='y'||ch=='\n'); }
相关文章推荐