欢迎来到一句话经典语录网
我要投稿 投诉建议
当前位置:一句话经典语录 > 心得体会 > 带头结点的单链表心得体会

带头结点的单链表心得体会

时间:2016-02-01 01:04

对比总结为什么一般情况下链式栈不带头结点而单链表要带头结点?

单链表可以带头结点 也可以不带 带头结点一般有两个优点:1)由于开始结点的位置存放在头结点的指针域中, 使对链表第一个位置上的操作和其他位置上的操作相同,不用特殊处理2)无论链表是否为空 头指针都是指向头结点的非空指针(空表中 头结点的指针域为空),因此 空表和非空表的处理也就统一了对于链式栈一般不带头结点 因为栈只对第一个节点进行操纵 如果加上了头结点 意在对头结点后面的结点也要进行操作 反而使算法复杂 所以设置头指针即可

对比总结为什么一般情况下链式栈不带头结点而单链表要带头结点?

单链表可以带头结点 也可以不带 带头结点一般有两个优点:1)由于开始结点的位置存放在头结点的指针域中, 使对链表第一个位置上的操作和其他位置上的操作相同,不用特殊处理2)无论链表是否为空 头指针都是指向头结点的非空指针(空表中 头结点的指针域为空),因此 空表和非空表的处理也就统一了对于链式栈一般不带头结点 因为栈只对第一个节点进行操纵 如果加上了头结点 意在对头结点后面的结点也要进行操作 反而使算法复杂 所以设置头指针即可

1.建立带头结点的单链表;

\\\/\\\/我是VC6.0,因为不是很熟练,还是得看着书类C的#include #include #define OK 1 #define ERROR 0 #define NULL 0 typedef int Status; typedef int ElemType; typedef struct LNode{ ElemType data; struct LNode *next; }LNode,*LinkList; int len; \\\/\\\/因为要后面需要调用表长,所以定义为变量 \\\/\\\/算法有待改进 Status CreatList_L(LinkList &L) { \\\/\\\/逆位序输入n个元素的值,建立带表头结点的单链线性表L \\\/\\\/ int len; printf(\\\ Input the amount of List:); scanf(%d,&len); L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; \\\/\\\/先建立一个带头结点的单链表 printf(\\\ Input the List:); for(int i=len;i>0;--i){ LinkList p=(LinkList)malloc(sizeof(LNode)); scanf(%d,&p->data); \\\/\\\/输入元素值 p->next=L->next; \\\/\\\/插入到表头 L->next=p; } return OK; } Status ListInsert_L(LinkList &L,int i,ElemType e){ \\\/\\\/在带头结点的单链表L中第i个位置插入元素e LinkList p=L; int j=0; while(p && jnext; ++j; } \\\/\\\/寻找第i-1个结点 if(!p || j>i-1) return ERROR; \\\/\\\/i小于1或者大于表长+1 LinkList s=(LinkList)malloc(sizeof(LNode)); \\\/\\\/生成新结点 s->data=e; s->next=p->next; p->next=s; return OK; } Status ListSwap_L(LinkList &L,int pos){ \\\/\\\/将单链表中第pos个结点和其前驱结点的相应逻辑顺序进行交换 if(pos<=1 || pos>len) return ERROR;\\\/\\\/pos小于等于1或者大于表长 LinkList p=L; int j=0; while(p && jnext; ++j; } \\\/\\\/选找pos位置的前驱的前驱 LinkList q=p->next;\\\/\\\/将pos位置的前驱结点赋值给q LinkList s=q->next;\\\/\\\/将pos位置的结点赋值给s p->next=s; q->next=s->next; s->next=q; return OK; } Status ListChoise_L(LinkList &L) { LinkList p,q,s; int temp; for(p=L;p;p=p->next) { s=p; \\\/*给记号赋值*\\\/ for(q=p->next;q;q=q->next) if(s->data>q->data) s=q; \\\/*是k总是指向最小元素*\\\/ if(p!=s) { \\\/*当k!=i是才交换,否则i即为最小*\\\/ temp=p->data; p->data=s->data; s->data=temp; } } return OK; } void Display_L(LinkList L) { \\\/\\\/对单链表进行输出 LinkList head; head=L; L=L->next; printf(\\\ The list is:); while(L) { printf(%d ,L->data); L=L->next; } L=head; } Status ListDelete_L(LinkList &L,int i,ElemType &e){ \\\/\\\/在带头结点的单链表L中,删除第i个元素,并由e返回值 LinkList p=L; int j=0; while(p->next && jnext; j++; }\\\/\\\/选找第i个结点,并令p指向其前驱 if(!(p->next) || j>i-1) return ERROR;\\\/\\\/删除位置不合理 struct LNode *q=p->next; p->next=q->next; e=q->data; free(q); return OK; } main() { int x,y,a,b,pos; LinkList L; CreatList_L(L); Display_L(L); printf(\\\ Input where to insert:); scanf(%d,&x); printf(\\\ Input the num to insert:); scanf(%d,&a); ListInsert_L(L,x,a); Display_L(L); printf(\\\ Input where to delete:); scanf(%d,&y); ListDelete_L(L,y,b); printf(\\\ Put out the list:); Display_L(L); printf(\\\ The delete num is:); printf( %d ,b); printf(\\\ The pos is:); scanf(%d,&pos); ListSwap_L(L,pos); printf(\\\ Put out the list:); Display_L(L); ListChoise_L(L); printf(\\\ After choise the list is:); Display_L(L); printf(\\\ ); return OK; }

1.建立带头结点的单链表;

\\\/\\\/我是VC6.0,因为不是很熟练,还是得看着书类C的#include #include #define OK 1 #define ERROR 0 #define NULL 0 typedef int Status; typedef int ElemType; typedef struct LNode{ ElemType data; struct LNode *next; }LNode,*LinkList; int len; \\\/\\\/因为要后面需要调用表长,所以定义为变量 \\\/\\\/算法有待改进 Status CreatList_L(LinkList &L) { \\\/\\\/逆位序输入n个元素的值,建立带表头结点的单链线性表L \\\/\\\/ int len; printf(\\\ Input the amount of List:); scanf(%d,&len); L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; \\\/\\\/先建立一个带头结点的单链表 printf(\\\ Input the List:); for(int i=len;i>0;--i){ LinkList p=(LinkList)malloc(sizeof(LNode)); scanf(%d,&p->data); \\\/\\\/输入元素值 p->next=L->next; \\\/\\\/插入到表头 L->next=p; } return OK; } Status ListInsert_L(LinkList &L,int i,ElemType e){ \\\/\\\/在带头结点的单链表L中第i个位置插入元素e LinkList p=L; int j=0; while(p && jnext; ++j; } \\\/\\\/寻找第i-1个结点 if(!p || j>i-1) return ERROR; \\\/\\\/i小于1或者大于表长+1 LinkList s=(LinkList)malloc(sizeof(LNode)); \\\/\\\/生成新结点 s->data=e; s->next=p->next; p->next=s; return OK; } Status ListSwap_L(LinkList &L,int pos){ \\\/\\\/将单链表中第pos个结点和其前驱结点的相应逻辑顺序进行交换 if(pos<=1 || pos>len) return ERROR;\\\/\\\/pos小于等于1或者大于表长 LinkList p=L; int j=0; while(p && jnext; ++j; } \\\/\\\/选找pos位置的前驱的前驱 LinkList q=p->next;\\\/\\\/将pos位置的前驱结点赋值给q LinkList s=q->next;\\\/\\\/将pos位置的结点赋值给s p->next=s; q->next=s->next; s->next=q; return OK; } Status ListChoise_L(LinkList &L) { LinkList p,q,s; int temp; for(p=L;p;p=p->next) { s=p; \\\/*给记号赋值*\\\/ for(q=p->next;q;q=q->next) if(s->data>q->data) s=q; \\\/*是k总是指向最小元素*\\\/ if(p!=s) { \\\/*当k!=i是才交换,否则i即为最小*\\\/ temp=p->data; p->data=s->data; s->data=temp; } } return OK; } void Display_L(LinkList L) { \\\/\\\/对单链表进行输出 LinkList head; head=L; L=L->next; printf(\\\ The list is:); while(L) { printf(%d ,L->data); L=L->next; } L=head; } Status ListDelete_L(LinkList &L,int i,ElemType &e){ \\\/\\\/在带头结点的单链表L中,删除第i个元素,并由e返回值 LinkList p=L; int j=0; while(p->next && jnext; j++; }\\\/\\\/选找第i个结点,并令p指向其前驱 if(!(p->next) || j>i-1) return ERROR;\\\/\\\/删除位置不合理 struct LNode *q=p->next; p->next=q->next; e=q->data; free(q); return OK; } main() { int x,y,a,b,pos; LinkList L; CreatList_L(L); Display_L(L); printf(\\\ Input where to insert:); scanf(%d,&x); printf(\\\ Input the num to insert:); scanf(%d,&a); ListInsert_L(L,x,a); Display_L(L); printf(\\\ Input where to delete:); scanf(%d,&y); ListDelete_L(L,y,b); printf(\\\ Put out the list:); Display_L(L); printf(\\\ The delete num is:); printf( %d ,b); printf(\\\ The pos is:); scanf(%d,&pos); ListSwap_L(L,pos); printf(\\\ Put out the list:); Display_L(L); ListChoise_L(L); printf(\\\ After choise the list is:); Display_L(L); printf(\\\ ); return OK; }

一个带头节点的单链表的问题,请大神解答

贴上整个未删减函数。

我怀疑你有部分关键代码未贴上,不好看出问题

一个带头节点的单链表的问题,请大神解答

贴上整个未删减函数。

我怀疑你有部分关键代码未贴上,不好看出问题

带头结点的单链表

很简单,说是一个类。

表示一个单元,这个单元中,有地址,,上一级的,下一级的。

当前级的;同时还有一些其它; 就是讲 class a { public String next ; public String back; public String thiss; set get } 就是这个意思。

看懂请采纳;

带头结点的单链表

很简单,说是一个类。

表示一个单元,这个单元中,有地址,,上一级的,下一级的。

当前级的;同时还有一些其它; 就是讲 class a { public String next ; public String back; public String thiss; set get } 就是这个意思。

看懂请采纳;

声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。联系xxxxxxxx.com

Copyright©2020 一句话经典语录 www.yiyyy.com 版权所有

友情链接

心理测试 图片大全 壁纸图片