【数据结构】单链表
来源:互联网 发布:php初级程序员面试题 编辑:程序博客网 时间:2024/06/15 07:19
PS:是模仿别人的来写的,调试成功,注意指针的指针用法,还有函数指针作为实参的调用形式
#include<iostream.h>#include<stdlib.h>typedef struct Person{char name[20];int age;} ElemType;typedef struct LinkNode{ElemType data;struct LinkNode *next;} *Point;typedef struct {Point head,tail;int length;}List;bool MakeNode(Point *p,ElemType e);void FreeNode(Point *p);void InitList(List *L);void DestoryList(List *L);bool ListEmpty(List L);int ListLength(List L);ElemType GetElem(Point p);int Compare(Point p,ElemType e);int LocateElem(List L,ElemType e,int *n,int (*Compare)(Point,ElemType));void ClearList(List *L);void SetElem(Point *p,ElemType e);void ListInsert(List *L,Point *p,Point s);void Visit(Point *p,ElemType e );void ListTraverse(List*L,ElemType e,void (*Visit)(Point *,ElemType));void Print(List L);//******************************************主函数************************************************************//void main(){ElemType e1={"yang1",20}, e2={"yang2",21}, e3={"yang3",22}, e4={"yang4",23}, e5={"yang5",24}, e6={"yang6",25},e0={"yang0",0};Point q1,q2,q3,q4,q5,q6,q0;MakeNode(&q1,e1);MakeNode(&q2,e2);MakeNode(&q3,e3);MakeNode(&q4,e4);MakeNode(&q5,e5);MakeNode(&q6,e6);MakeNode(&q0,e0); // SetElem(&q1,e3);List L1;InitList(&L1);L1.head=L1.tail=q1;L1.length=1; ListInsert(&L1,&q1,q2);ListInsert(&L1,&q2,q3);ListInsert(&L1,&q3,q4);ListInsert(&L1,&q4,q5);ListInsert(&L1,&q5,q6);ListInsert(&L1,&q3,q0);Print(L1);ListTraverse(&L1,e0,Visit); //注意函数指针的调用形式cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\n";Print(L1); int s;int b=LocateElem(L1,e4,&s,Compare ); //注意函数指针的调用形式if(b){cout<<"在"<<s<<"处找到!\n";}}//*******************************函数**************************************************//bool MakeNode(Point *p,ElemType e){*p=(Point)malloc(sizeof(LinkNode));if(!(*p)){cout<<"分配内存失败\n";return false;}else{(*p)->data=e;(*p)->next=NULL; return true;}}void FreeNode(Point *p){free(*p);*p=NULL;}void InitList(List *L){L->head=NULL;L->tail=NULL;L->length=0;}void DestoryList(List *L){free(L->head);free(L->tail);L->length=0;}bool ListEmpty(List L){if(L.length==0)return true;elsereturn false;}int ListLength(List L){return L.length;}ElemType GetElem(Point p){return p->data;}int Compare(Point p,ElemType e){int i=0;ElemType tmp=p->data;for( i=0;tmp.name[i]!='\0';i++){if(tmp.name[i]!=e.name[i])return 0;}if (tmp.name[i]!=e.name[i]){return false;}if(tmp.age!=e.age)return false;elsereturn true;}//int b=LocateElem(L1,e4,&s,Compare );int LocateElem(List L,ElemType e,int *n,int (*Compare)(Point,ElemType)){Point tmp ;tmp=L.head;//for(int i=0;(tmp)!=NULL;i++)//{//if(!Compare(tmp,e))//{///tmp=tmp->next;//continue;//}//else//{//*n=i+1;//return true;//}//}//return false;for(int i=0;i<L.length;i++){if(Compare(tmp,e)){*n=i+1;return 1;}tmp=tmp->next;}cout<<"木有找到"<<endl;return 0;}void ClearList(List *L){Point p=L->head,pp;while(p){pp=p->next;free(p);p=pp;}L->length=0;L->head=NULL;L->tail=NULL;}//SetElem(&q1,e3);void SetElem(Point *p,ElemType e){(*p)->data=e;}//ListInsert(&L1,&q1,q2);void ListInsert(List *L,Point *p,Point s){if((*p)==L->tail){s->next=L->tail->next;L->tail->next=s;//(*p)=s;L->tail=s;}else{s->next=(*p)->next;(*p)->next=s;//(*p)=s;}L->length++;}void Visit(Point *p,ElemType e ){int i;for( i=0;e.name[i]!='\0';i++){(*p)->data.name[i]=e.name[i];}(*p)->data.name[i]=e.name[i];(*p)->data.age=e.age;}void ListTraverse(List*L,ElemType e,void (*Visit)(Point *,ElemType)){Point p=L->head;for(int i=0;i<L->length;i++){Visit(&p,e);p=p->next;}}void Print(List L){if(L.length==0){cout<<"空表!!!\n"<<endl;return;}Point p=L.head;for(int i=0;i<L.length;i++){cout<<"第"<<i+1<<"个链表:\n";cout<<"name:"<<p->data.name<<" "<<"age:"<<p->data.age<<endl<<endl;;p=p->next;}}
0 0
- 数据结构---单链表
- 数据结构--单链表
- 数据结构单链表
- 数据结构单链表
- 【数据结构】单链表
- 数据结构单链表
- [数据结构]单链表
- 数据结构--单链表
- 数据结构--单链表
- 数据结构-单链表
- 数据结构 -- 单链表
- 数据结构-单链表
- 数据结构 --- 单链表
- 数据结构---单链表
- 数据结构--单链表
- 数据结构 单链表
- 数据结构-单链表
- 数据结构---单链表
- 线段树小结
- 程序启动顺序ios
- 2016年暑假集训周赛#1题解
- 计算机网络Socket编程之TCP协议
- case class 跟普通class有什么区别
- 【数据结构】单链表
- spring如何集成一主多从的redis
- Python 爬虫3——第一个爬虫脚本的创建
- 面试总结(malloc、虚继承、assert)
- 怎么用gnuplot画动图
- Oracle pl/sql 出现"PLS-00103: 出现符号""在需要下列之一时" 错误
- Android SQLite的介绍
- 按钮翻转并控制视图的翻转(带动画)Demo
- 封装控件,需要重写的方法