求数据结构课件
//链表的创建,贼值,删除,插入(前插和后插),查找,销毁#include #include typedef struct LNode{ char data; struct LNode *next;}LNode,*LinkList;void ListTraverse(LinkList L)//输出链表中的所有元素{ LinkList p; if(L->next==NULL) { printf(该链表在初始状态下为空表:n); return; } p=L->next; while(p!=NULL) { printf(%c ,p->data); p=p->next; } printf(nn);}void InitList(LinkList &L)//创建链表并对其贼值,其值为非负整数{ int i=0; char a; LinkList p,q; L=new LNode; if(!L) {printf(内存不足!); exit(0);} L->next=NULL; p=L; printf(请输入若干个元素的值(以#结束):); for(i=0;a!='#';i++) { a=getchar(); //scanf(%c,&a); q=new LNode; if(!q) {printf(内存不足!); exit(0);} q->next=NULL; q->data=a; p->next=q; p=q; } /*while(1) { i++; printf(请输入第%d个元素的值(以#结束):,i); scanf(%c,&a); if(a=='#') break; q=new LNode; if(!q) {printf(内存不足!); exit(0);} q->next=NULL; q->data=a; p->next=q; p=q; }*/ printf(链表的初始元素如下:n);//输出链表初始状态下的元素 ListTraverse(L);}int ListLength(LinkList L)//求链表的长度,即有多少个结点(不包括头结头){ int i=0; LinkList p; if(L->next==NULL) return 0; p=L->next; while(p) { i++; p=p->next; } return i;}void ListDelete(LinkList &L,int i,char &e)//删除链表中的第i个元素,并用e返回其值{ int j=0; LinkList p,q; if(iListLength(L)) { printf(删除操作的输入出错,表中不存第%d个元素:n,i); return; } p=L; while(j!=i-1) { j++; p=p->next; } q=p->next; e=q->data ; p->next=q->next; delete q; printf(删除第%d个元素以后链表中的所有元素如下:n,i); ListTraverse(L); printf(被删除的元素是:%cn,e);}void ListInsert(LinkList &L,int i,char e,char f)//把e插到第i个元素前,把f插到第i个元素后{ int j=0; LinkList p,q1,q2; if(iListLength(L)) { printf(插入操作的输入出错,表中不存第%d个元素:n,i); return; } p=L; q1=new LNode; if(!q1) {printf(内存不足!); exit(0);} q1->next=NULL; q1->data=e; q2=new LNode; if(!q2) {printf(内存不足!); exit(0);} q2->next=NULL; q2->data=f; while(j!=i-2) { j++; p=p->next; } q1->next=p->next; q2->next=q1->next->next; q1->next->next=q2; p->next =q1; printf(把%c和%c分别插入第%d个元素的前面与后面,链表的全部元素值如下:,e,f,(i-1)); ListTraverse(L);}int LocatElem(LinkList L,char e)//在链表中查找元素e,返回其在链表中的位置,如果链表中没有这个元素,返回0{ int i=0; LinkList p; p=L->next; while(p&&p->data!=e) { i++; p=p->next; } if(!p) return 0; else return i+1;}void DstroyList(LinkList L){ LinkList p; while(L) { p=L; L=L->next; delete p; }}void main(){ char e,f; int i,m; int a; LinkList L; InitList(L);//初始化链表 m=ListLength(L); printf(表长:%dn,m); printf(请输入你的选择:n ); printf(1.删除某个结点n ); printf(2.插入某个元素n ); printf(3.查找某个元素n ); printf(4.销毁链表n); scanf(%d,&a); switch(a) { case 1:{ printf(请输入结点位序i:); scanf(%d,&i); printf(n); ListDelete(L,i,e); } break; case 2:{//printf(请依次输入要插入的字符型元素e、f和参考位置i:); //e=getchar(); f=getchar(); //scanf(%c%c,&e,&f); //printf(%cn,e); /*scanf(%d,&i);*/ //printf(n); printf(友情提示:此操作将把e和f分别插入到位序为i结点之前和之后n); ListInsert(L,4,'e','f'); //void ListInsert(LinkList &L,int i,char e,char f) } break; case 3:{//printf(请输入待查找的字符型元素e:); //scanf(%c,&e); //printf(n); i=LocatElem(L,'e'); if(i==0) printf(链表中不存在e这个元素n); else printf(e是链表中的第%d个元素。n,i); } break; case 4:DstroyList(L);break; }/*ListDelete(L,2,e);//删除 ListInsert(L,3,88,77); i=LocatElem(L,20); if(i==0) printf(链表中不存在20这个元素n); else printf(20是链表中的第%d个元素。n,i); DstroyList(L);*/} 很不错哦,你可以试下2421136147
这里有不少的,一定可以帮帮你,加油,数据结构课件-0-0.html