链表的主函数怎么写

1.请问这个链表主函数怎么写

哥们你这是数据结构上的吧。

学数据结构要灵活。

这里给你一个建立链表的程序:(以SDUTOJ 2116题为例题) #include using namespace std; class List { public: int data;//数据域,用来记录数据 List *next;//指着域,用来记录它下一个节点的地址 //访问这个变量能找到它的下一个节点 }; void del(List *p)//递归释放内存 { if(p == NULL)//p为NULL说明p访问到链表结尾了 return ;//访问到结尾返回 del(p->next);//如果没访问到结尾,会在这里一直调用函数本身递归,直到遇见NULL delete p;//遇到NULL返回到head的时候,从后向前删除节点,释放内存 //如果从前面删除的话就会把本节点的next值也给删除了,就没办法访问到下一个节点了 //如果定义一个临时变量先记录下一个节点地址然后再删除本节点也是可以解决这个问题的 } //void del(List *head) //{ // List *p = head,*q; // while(p) // { // q = p; // p = p->next; // delete q; // } //}//这样释放内存也是可以的 int main() { List *head = new List;//new开辟内存,地址赋给head,head代表这个 //链表的头,访问head能找到这个链表 head->next = NULL;//初始状态下只有head链节,他没有后继结点,所以他的next值为NULL(空) List *p,*q;//p是游动指针,建立链表的时候永远指向最后一个链节 //q是开新内存用的,也就是增加一个新的链节 int n;//输入数的个数 cin>>n; p = head;//初始状态下只有head一个链节,那么最后一个链节也是head,让p指向head for(int i = 0;i < n;i++) { q = new List;//增加新的链节q cin>>q->data;//给新链节的data赋值 p->next = q;//把q挂在p(初始值是head)的后面 q->next = NULL;//新链节是链表的最后一个链节,后面没有后继,那么,就把他的next值设为NULL(空) p = q;//q成为p的后继之后,q就是最后一个节点,我们规定p指向最后一个节点,这里就把q赋给p }//循环完成后,链表就建立完了,head是他们的头 p = head->next;//p在上面是指向最后一个元素,以便于增加新的链节后能很快的放在它的后面,达到添加链节的目的 //现在我们就发动他的游动特点,来访问整个链表,从上面看来,我们输入的第一个整数放在q->data //里面了,并没有放在head里面,那么,我们访问的话,head的下一个节点才是第一个存储节点,用p //访问head的next,判就指向了链表中的第一个存储输入数的节点(真正第一个节点是head,因为head //因为head的data没有值,所以,我们说head的后面第一个节点为有效节点) while(p != NULL)//当p访问不到NULL的时候,就会一直循环,NULL是链表结束的标志 { coutnext != NULL) cout<<" ";//这两行是调格式的,为了能在最后不多输出空格,其实只是为了在OJ上AC p = p->next;//p访问把本节点的next值,p就指向下一个节点,相当于向后移动一个节点 } cout<

2.链表的各函数在主函数中怎么联系起来,就是写的子函数在主函数中要

typedef struct test { int a; struct test *next; }Test; typedef struct test1 { int a; struct test1 *next; struct test1 *front; }Test1;//单链表创建 Test *Create() { Test *head,*p1,*p2; head = p1 = p2 = NULL; p1 = (Test*)malloc(sizeof(Test)); scanf("%d",&p1->a); while(p1->a != 0) { if(head == NULL) { head = p1; } else { p2->next = p1; } p2 = p1; p1 = (Test*)malloc(sizeof(Test)); scanf("%d",&p1->a); } p2->next = NULL; return head; }//创建双向链表 Test1 *Create2() { Test1 *head,*p1,*p2; head = p1 = p2 = NULL; p1 = (Test1*)malloc(sizeof(Test1)); scanf("%d",&p1->a); p1->front = NULL; p1->next = NULL; while(p1->a != 0) { if(head == NULL) { head = p1; } else { p2->next = p1; p1->front = p2; } p2 = p1; p1 = (Test1*)malloc(sizeof(Test1)); scanf("%d",&p1->a); p1->front = NULL; p1->next = NULL; } p2->next = NULL; return head; }//只遍历一次单链表,找出中间元素 void SearchCenter(Test *head) { Test *p1,*p2; p1 = p2 = head; while(p2->next != NULL) { p2 = p2->next; if(p2->next != NULL) p2 = p2->next; p1 = p1->next; } printf("链表中间结点为:%d\n",p1->a); }//双向链表输出 void output1(Test1* head) { Test1 *p1,*p2; p1 = head; while(p1!= NULL) { printf("%d,",p1->a); p2 = p1; //p2用来保存最后一个结点 p1 = p1->next; } //从最后一个结点往前输出 while(p2 != NULL) { printf("%d,",p2->a); p2 = p2->front; } printf("\n"); } void output(Test* head) { Test *p1; p1 = head; while(p1 != NULL) { printf("%d,",p1->a); p1 = p1->next; } printf("\n"); }//单链表翻转//Next用来保存原链表中p结点的下一个结点 Test *reverse1(Test *head) { Test *p,*back,*Next; if(head == NULL || head->next == NULL) return head; back = head; p = back->next; back->next = NULL; while(p->next != NULL) { Next = p->next; p->next = back; back = p; p = Next; } p->next = back; head = p; return head; } void main() { Test *head = NULL; Test1 *head1 = NULL; head1 = Create2(); output1(head1); head = Create(); printf("初始链表为:\n"); output(head); SearchCenter(head); head = reverse1(head); output(head); } 可以参考这个的方法写。

3.单链表,求最大值的算法中的主函数应该怎么写

下:

(1)先创建一个新结点,并用指针p指向该结点。

(2)将q指向的结点的next域的值(即q的后继结点的指针)赋值给p指向结点的next域。

(3)将p的值赋值给q的next域。

通过以上3步就可以实现在链表中由指针q指向的结点后面插入p所指向的结点。可以通过图1-5形象地展示出这一过程。

图1-5 向链表插入结点过程

下面给出代码描述:

1.void insertList(LinkList *list,LinkList q,ElemType e) /*当链表为空时*/ 10. else 16.} 上面的这段代码描述了如何在指针q指向的结点后面插入结点的过程。其过程包括以下几步。

(1)首先生成一个新的结点,大小为sizeof(LNode),用LinkList类型的变量p指向该结点。将该结点的数据域赋值为e。

(2)接下来判断链表是否为空。如果链表为空,则将p赋值给list,p的next域的值置为空。否则,将q指向的结点的next域的值赋值给p指向结点的next域,这样p指向的结点就与q指向结点的下一个结点连接到了一起。

(3)然后再将p的值赋值给q所指结点的next域,这样就将p指向的结点插入到了指针q指向结点的后面。

其实通过上面这段算法描述可以看出,应用这个算法同样可以创建一个链表。这是因为当最开始时链表为空,即list==NULL,该算法可自动为链表创建一个结点。在下面的创建其他结点的过程中,只要始终将指针q指向链表的最后一个结点,就可以创建出一个 链表。

注意:函数insertList()的参数中有一个LinkList *list,它是指向LinkList类型的指针变量,相当于指向LNode类型的指针的指针。这是因为在函数中要对list,也就是表头指针进行修改,而调用该函数时,实参是&list,而不是list。因此必须采取指针参数传递的办法,否则无法在被调函数中修改主函数中定义的变量的内容。以下的代码也有类似的情况。

4.单链表,求最大值的算法中的主函数应该怎么写

下:(1)先创建一个新结点,并用指针p指向该结点。

(2)将q指向的结点的next域的值(即q的后继结点的指针)赋值给p指向结点的next域。(3)将p的值赋值给q的next域。

通过以上3步就可以实现在链表中由指针q指向的结点后面插入p所指向的结点。可以通过图1-5形象地展示出这一过程。

图1-5 向链表插入结点过程 下面给出代码描述:1.void insertList(LinkList *list,LinkList q,ElemType e) /*当链表为空时*/ 10. else 16.} 上面的这段代码描述了如何在指针q指向的结点后面插入结点的过程。其过程包括以下几步。

(1)首先生成一个新的结点,大小为sizeof(LNode),用LinkList类型的变量p指向该结点。将该结点的数据域赋值为e。

(2)接下来判断链表是否为空。如果链表为空,则将p赋值给list,p的next域的值置为空。

否则,将q指向的结点的next域的值赋值给p指向结点的next域,这样p指向的结点就与q指向结点的下一个结点连接到了一起。(3)然后再将p的值赋值给q所指结点的next域,这样就将p指向的结点插入到了指针q指向结点的后面。

其实通过上面这段算法描述可以看出,应用这个算法同样可以创建一个链表。这是因为当最开始时链表为空,即list==NULL,该算法可自动为链表创建一个结点。

在下面的创建其他结点的过程中,只要始终将指针q指向链表的最后一个结点,就可以创建出一个 链表。注意:函数insertList()的参数中有一个LinkList *list,它是指向LinkList类型的指针变量,相当于指向LNode类型的指针的指针。

这是因为在函数中要对list,也就是表头指针进行修改,而调用该函数时,实参是&list,而不是list。因此必须采取指针参数传递的办法,否则无法在被调函数中修改主函数中定义的变量的内容。

以下的代码也有类似的情况。

5.c++数据结构中链表的主函数中代码实现怎么写

#include using namespace std;template struct Node{T data;Node *next;};template class LinkList{private:Node *first;public:LinkList();~LinkList();void Display();void Insert(int i,T x);void Invert();void InsertF(T x);void InsertR(T x);void DeleteAll();};template void LinkList::InsertF(T x){Node *s;s=new Node;s->data=x;s->next=first->next;first->next=s;}template void LinkList::InsertR(T x){Node*r,*s;for(r=first;r->next!=NULL;r=r->next);s=new Node;s->data=x;s->next=r->next;r->next=s;}template LinkList::LinkList(){first=new Node;first->next=NULL;}template LinkList::~LinkList(){} template void LinkList::Display(){Node *p;for(p=first->next;p!=NULL;p=p->next)coutvoid LinkList::Insert(int i,T x){int count=0;Node*p;for(p=first;p->next!=NULL;p=p->next){if(count=i-1)break;count++;}if(count=i-1){Node*s;s=new Node;s->data=x;s->next=p->next;p->next=s;}else throw"Illegal position";}template void LinkList::Invert(){Node*p,*s;p=first->next;first->next=NULL;while(p){s=p;p=p->next;s->next=first->next;first->next=s;}}template void LinkList::DeleteAll(){Node *s,*p;p=first;while(p->next)if(p->next->data>='0'&&p->next->data<='9'){s=p->next;p->next=s->next;delete s;}else p=p->next;}int main(){LinkListA;while(1){char ch;cin>>ch;if(ch='#')break;try{A.InsertR(ch);}catch(const char*message){cout<

6.C语言:链表的常用操作,完成下列子函数,并写主函数调用

const int NULL =0;template struct Node { T data; //数据域 struct Node * next; //指针域,在这里可省略};template class LinkList{public: LinkList(){first = new Node ; first->next = NULL;}//无参构造函数 LinkList(T a [], int n);//有参构造函数,使用含有n个元素的数组a初始化单链表 ~LinkList(); //析构函数 int GetLength(); //获取线性表的长度 Node * Get(int i); //获取线性表第i个位置上的元素结点地址 int Locate (T x); //查找线性表中值为x的元素,找到后返回其位置 void Insert (int i, T x);//在线性表的第i个位置上插入值为x的新元素 T Delete(int i); //删除线性表第i个元素,并将该元素返回 void PrintList(); //按次序遍历线性表中的各个数据元素 Node * GetFirst(){return first;}private: Node * first; //头指针};#include "linklist.h"#include "iostream"using namespace std;/*template LinkList::LinkList(T a [], int n) //头插法建立单链表{ first = new Node ; first ->next = NULL; //构造空单链表 for (int i=n-1;i>=0;i--) { Node * s = new Node ;//①建立新结点 s->data = a[i]; //②将a[i]写入到新结点的数据域 s->next = first->next; //③修改新结点的指针域 first->next = s; //④修改头结点的指针域,将新结点加入到链表中 }}*/template LinkList::LinkList(T a [], int n) //尾插法建立单链表/*① 在堆中建立新结点:Node * s = new Node ;② 将a[i]写入到新结点的数据域:s->data = a[i];③ 将新结点加入到链表中: r->next = s;④ 修改尾指针:r = s;*/{ first = new Node ; Node * r = first; for (int i=0;i * s = new Node ;//①建立新结点 s->data = a[i]; //②将a[i]写入到新结点的数据域 r->next = s; //③将新结点加入到链表中 r = s; //④修改尾指针 } r->next = NULL; //终端结点的指针域设为空}template LinkList::~LinkList() //析构函数{ Node * p = first; //初始化工作指针p while (p) //要释放的结点存在 { first = p; //暂存要释放的结点 p = p -> next; //移动工作指针 delete first; //释放结点 }}template Node * LinkList::Get(int i) //获取线性表第i个位置上的元素{ Node * p = first -> next; //初始化工作指针 int j = 1; //初始化计数器 while ( p && j != i ) //两个条件都满足,则继续循环 { p = p -> next; //工作指针后移 j++; } if (!p) throw "查找位置非法"; //工作指针已经为空 else return p; //查找到第i个元素}template int LinkList::Locate (T x) //查找线性表中值为x的元素,找到后返回其位置{ Node * p = first ->next; //初始化工作指针 int j=1; while (p) { if (p->data == x) return j; //找到被查元素,返回位置 p = p->next; j++; } return -1; //若找不到,返回错误标识-1}template void LinkList::Insert (int i, T x)//在线性表的第i个位置上插入值为x的新元素{ Node * p = first; //初始化工作指针 if (i != 1) p = Get(i-1); //若不是在第一个位置插入,得到第i-1个元素的地址。

Node * s = new Node ;//建立新结点 s->data = x; s->next = p->next; p->next = s; //将新结点插入到p所指结点的后面}template T LinkList::Delete(int i) //删除线性表第i个元素,并将该元素返回{ Node * p = first; //初始化工作指针 if (i != 1) p = Get(i-1); //若不是在第一个位置插入,得到第i-1个元素的地址。 Node * q = p->next; p->next = q->next; T x = q->data; delete q; return x;}template void LinkList::PrintList() //按次序遍历线性表中的各个数据元素{ Node * p = first->next ; //初始化工作指针 while (p){ cout data next; }}。

7.如何建立单向链表函数(写的出主函数,但不懂得如何定义成函数)

#include

#include

struct node

{

int data;

struct node *next;

};

struct node *createlist(); /*声明函数*/

struct node *createlist() /*函数体,返回struct node *类型的头结点*/

{

int x;

struct node *h,*s,*r;

h=(struct node *)malloc(sizeof(struct node));

r=h;

scanf("%d",&x);

while(x!=-1)

{

s=(struct node *)malloc(sizeof(struct node));

s->data=x;

r->next=s;

r=s;

scanf("%d",&x);

}

r->next=NULL;

return h; /*返回头结点*/

}

void main()

{

struct node *head;

head=createlist(); /*获取函数的返回值,也就是头结点*/

}

8.线性表的主函数要怎么写

/*请输入待建立的表长 : 5请输入5个元素用空格分开 : 56 54 34 12 76成功建立表!插入元素10。

56 10 54 34 12 76删除第3个元素。56 10 34 12 76Press any key to continue*/#include using namespace std;#define MaxSize 100typedef int datatype;typedef struct { datatype data[MaxSize]; int last;}SeqList;void Init_SeqList(SeqList*L) { int i; cout > L->last; cout last last;i++) { cin >> L->data[i]; } cout last == MaxSize - 1) { cout L->last + 2)) { cout last;j >= i - 1;j--) L->data[j + 1] = L->data[j]; L->data[i - 1] = x; L->last++; return 1;}int Delete_SeqList(SeqList *L,int i) { int j; if((i L->last + 1)) { cout last;j++) L->data[j - 1] = L->data[j]; L->last--; return 1;}int Locate_SeqList(SeqList *L,datatype x) { int i = 0; while((i last) && (L->data[i] != x)) i++; if(i >= L->last) return -1; else return 0;}void Display_SeqList(SeqList *L) { if(L == NULL) cout last;i++) printf("%d ",L->data[i]); cout 追问: 运行不了啊。

追答: 代码上边的/* 。

. */中的内容是在VC下的运行结果,应该可以的。

评论0 0 0。

链表的主函数怎么写

转载请注明出处育才学习网 » 链表的主函数怎么写

知识

河字行书怎么写

阅读(166)

本文主要为您介绍河字行书怎么写,内容包括河字钢笔字行书怎么写,钢笔字行书河字怎样写,河字的草书怎么写。行书的水字写法如下:

知识

羊皮拼音怎么写

阅读(157)

本文主要为您介绍羊皮拼音怎么写,内容包括“皮子”的拼音怎么写,羊皮筏子的拼音怎么写,羊皮读什么音节。

知识

栏的拼音怎么写

阅读(178)

本文主要为您介绍栏的拼音怎么写,内容包括请问栏字的大写拼音怎么写,圈栏的读音拼音是什么,怎么写,圈栏的读音拼音是什么,怎么写。(圈栏)拼音如下:【汉语拼音】圈(quān) 栏(lán)圈 ,多音字:[juàn] 养家畜的棚栏:~舍(shè ㄕㄜˋ)。~养。~牢(

知识

二分音符的三连音怎么写

阅读(286)

本文主要为您介绍二分音符的三连音怎么写,内容包括二分音符的三连音怎么写,二分音符的三连音怎么写,二分音符的三连音怎样打拍。全音符的九连音是9个八分音符。四分音符的三连音是3个八分音符,四分音符的五连音是5个十六分音符。16分音符的

知识

雪的作文50字怎么写

阅读(163)

本文主要为您介绍雪的作文50字怎么写,内容包括关于雪的50字作文,描写雪的片段作文,50字左右,要带一种描写方法,关于雪的作文50字快急急急急急。昨夜的雪,飘飘洒洒下一夜。我和母亲在路灯下散步,看见雪扑簌簌地飞着。我好想扑到那美丽的“飞雪

知识

国字小篆怎么写

阅读(293)

本文主要为您介绍国字小篆怎么写,内容包括篆书的国怎么写,甲骨文的国字怎么写,篆书的国怎么写。国字的篆书写法如下:

知识

文献综述的前言怎么写

阅读(157)

本文主要为您介绍文献综述的前言怎么写,内容包括论文的摘要、前言和文献综述怎么写,文献综述的引言怎么写,大学生毕业论文文献综述前言怎么写。文献综述是对某一方面的专题搜集大量情报资料后经综合分析而写成的一种学术论文, 它是科学文献

知识

赵字甲骨文怎么写

阅读(564)

本文主要为您介绍赵字甲骨文怎么写,内容包括赵字的甲骨文—金文—小篆—隶书—楷书—行书怎么写,请问“赵”姓的赵字的甲骨文怎么写又怎么解释,赵字的甲骨文和金文。

知识

幼儿园问卷家长怎么写

阅读(217)

本文主要为您介绍幼儿园问卷家长怎么写,内容包括幼儿园家长问卷调查表家长的优秀事迹怎么写,幼儿园家长调查问卷结束语怎么写,幼儿园问卷调查怎么写。感谢老师倾注爱心,巧妙化解儿子的消极情绪 开学初,儿子抵抗上幼儿园,以哭闹逃避午睡,每天早

知识

卖家承诺怎么写

阅读(147)

本文主要为您介绍卖家承诺怎么写,内容包括淘宝网卖家承诺怎么写,“卖家承诺”这句话英文怎么写谢谢,客户承诺书怎么写。承诺书 本人XX(身份证号码:XX), 年 月 日至 年 月 日期间在XX公司工作。本人现应聘北京XX科技发展有限公司 职位(写承诺书的

知识

语言设置韩文怎么写

阅读(200)

本文主要为您介绍语言设置韩文怎么写,内容包括语言设置四个字用韩语怎么写,iphone语言设置了韩文怎么改中文,手机语言怎样设置成韩语的。第一步,先找到 iPhone 主屏上的“设置”图标,点击打开;第二步,在设置列表中找到“通用”选项,点击进入;第三

知识

感激的英文怎么写

阅读(175)

本文主要为您介绍感激的英文怎么写,内容包括感谢的英语单词,感激的英文怎么写,感恩的英文怎么写。感谢的英文单词有:gratitude、hankful、benedictory 、thank 、grateful gratitude 读音

知识

双喜繁体字怎么写

阅读(362)

本文主要为您介绍双喜繁体字怎么写,内容包括双喜的繁体字怎么写,双喜的喜字繁体字怎么写,双喜字繁体字怎么写。“双喜”的繁体字如图喜的拼音是 xǐ 简体部首: 口 ,部外笔画: 9 ,总笔画: 12释义◎ 高兴,快乐:欢~。~悦。~讯。~剧。~气

知识

初一寒假计划怎么写

阅读(163)

本文主要为您介绍初一寒假计划怎么写,内容包括初一寒假计划怎么写,初一寒假学习计划怎么写,初一寒假计划怎么写。树立信心,努力坚持,别放弃,更不可半途而废。早晨合理安排30分钟读一读英语,你要知道,外语在初一是基础呀。2、利用3节课的时间分别

知识

matlab中怎么写函数

阅读(268)

本文主要为您介绍matlab中怎么写函数,内容包括matlab怎么写函数文件~,matlab中函数应该怎么写,matlab如何输入函数。首先在电脑中打开baimatlab软件。

知识

excel根号函数怎么写

阅读(228)

本文主要为您介绍excel根号函数怎么写,内容包括Excel中根号怎么输入,如何在EXCEL表格里面输入根号公式,excel公式中开根号是哪一个函数啊。打开excel文档,点击空白单元格。

知识

r语言函数怎么写

阅读(215)

本文主要为您介绍r语言函数怎么写,内容包括R语言怎么写函数,r语言function怎么写,如何用R语言编写一些自己的函数。自带函数factorial(n),可以算正整数n的阶乘自带函数prod(x),可以算向量x的连乘,当x为1:n时即为阶乘5的阶乘5!可以

知识

函数单调区间怎么写

阅读(309)

本文主要为您介绍函数单调区间怎么写,内容包括函数的单调区间怎么写,解函数的单调区间的方法和步骤,求这个函数的单调区间~(写步骤)。单调性的定义及其三种表述方法:设有函数y = f(x) , ( X∈M ) (1)、首先根据函数图象的特点得出定义的图象语

知识

函数主函数调用函数怎么写

阅读(319)

本文主要为您介绍函数主函数调用函数怎么写,内容包括在主函数中,如何进入调用函数,c语言中主函数调用问题,请用通俗易懂的话语帮我讲解一下,在主函,一个主函数如何调用写在其他文件的函数。【1】调用方法:先生成一个对象,用“对象.方法()”的方

知识

matlab主函数子函数怎么写

阅读(216)

本文主要为您介绍matlab主函数子函数怎么写,内容包括Matlab中有子函数如何写主函数,高手指点一下Matlab的主函数和子函数的关系,怎么建立子函数搜狗,matlab如何设置主函数子函数。主函数在结构上与其他函数没有一点区别,之所以称之为主函数,

知识

sum函数怎么写

阅读(185)

本文主要为您介绍sum函数怎么写,内容包括如何写Sum函数,如何写Sum函数,pythonsum函数怎么写。方法/步骤1首先我们输入要计算的相关信息如下图;2然后在总分的下面bai进行插入dusum函数进行计算如下图先选定单元格;3然后点击菜单

知识

main函数怎么写

阅读(178)

本文主要为您介绍main函数怎么写,内容包括main函数怎么写,简述main函数的作用,java的main函数如何写。[编辑本段]main函数概述 日常生活中,要完成一件复杂的功能,我们总是习惯把“大功能”分解为多个“小功能”以实现。在C++程序的世界里

[/e:loop]