创建链表的函数怎么写

链表的主函数怎么写

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。

链表的主函数怎么写

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

知识

罗梅芬用日文怎么写(罗钰潇日语怎么写)

阅读(21423)

本文主要为您介绍罗梅芬用日文怎么写,内容包括伊蕾娜日语怎么写,王雪菲用日文怎么说,张佳怡在日语中怎么写啊怎么读啊。罗 ら ラ ra钰 ぎょく ギョク gyoku潇 しょう シヨウ shou第一列:日语汉字,写法同汉字,都要用繁体,这三个都挺难写的,看

知识

邓先生的英文怎么写(1~40的英文怎么说)

阅读(10437)

本文主要为您介绍邓先生的英文怎么写,内容包括“邓先生”用英语怎么写,1~40的英文怎么说,漂亮英文beautiful缩写怎么写。1 one 2 two 3 three 4 four 5 five 6 six 7 seven 8 eight 8 nine 10 te

知识

一个人布满皱纹怎么写(描写人物皱纹的句子)

阅读(9511)

本文主要为您介绍一个人布满皱纹怎么写,内容包括描写人物皱纹的句子,描写人物皱纹的句子,皱纹怎么描写。、老人脸上布满了皱纹,那一条条曲折不均的像是墙上斑驳的印迹,爬满了面容,留下了岁月的痕迹。2、外祖父是一位年过六旬的白发老人。在他

知识

登录接口怎么写(php登录的接口怎么写)

阅读(7756)

本文主要为您介绍登录接口怎么写,内容包括php登录的接口怎么写,网页登陆接口怎么做,网站登录接口程序怎么做。PHP 接口 接口 使用接口(interface),你可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。我们可以通过int

知识

档案奖惩情况怎么写(奖惩情况怎么写)

阅读(9598)

本文主要为您介绍档案奖惩情况怎么写,内容包括奖惩情况怎么写,个人简历及奖惩情况怎么填写,个人简历里面奖惩情况怎么写。在简历里的“奖励”部分,列出与你所获得的并与你的求职目标相关的荣誉、奖励和奖金。你既可以按时间顺序排列,也可以按

知识

头孢克肟拼音怎么写(头孢克肟的肟念什么)

阅读(7999)

本文主要为您介绍头孢克肟拼音怎么写,内容包括头孢克肟片全名拼音,头孢克肟片全名拼音,头孢克肟的肟念什么。肟[wò] :是含有羰基的醛、酮类化合物与羟胺作用而生成的有机化合物,可以参与许多有机化学反应,例如经典的Beckmann重排就是肟为底

知识

一库搜用日语怎么写(日语一库是什么意思)

阅读(7985)

本文主要为您介绍一库搜用日语怎么写,内容包括日语大神来,看动漫里的主人公说一句:恰,一库搜这是什么意思,一库一库;一搜库这两个日语是什么意思怎么写,看片都有“一库”(日语)是什么意。一库的意思就是“出发,出去”的意思。日语「行く」的音译

知识

外租无人机广告怎么写(植保无人机广告语)

阅读(6996)

本文主要为您介绍外租无人机广告怎么写,内容包括求一个无人机创意广告词谢谢巨友们了,求一关于无人机的广告标语,求一关于无人机的广告标语我们公司是做无人机的,新成立的公司,求。DJI大疆创新研发的的MG-1农业植保机专为农村作业环境设计,

知识

河南话que怎么写(河南话的nenna怎么写)

阅读(6528)

本文主要为您介绍河南话que怎么写,内容包括que怎么写,河南话的nenna怎么写,que怎么写。尿一壶(niào yī hú)关系密切,观点一致。例:“他俩今天尿一壶啦。”●尿(niào)⑴、从尿道排泄的液体。⑵、排泄小便。⑶、不放

知识

国学经文的论文怎么写(国学征文该怎么写)

阅读(7108)

本文主要为您介绍国学经文的论文怎么写,内容包括国学征文该怎么写,弟子规的400论文,关于国学经典的征文怎么写。“子曰:“温故而知新,可以为师”……小时,总是觉得国学就是没用的,古人写的话,我们还需要背,每次老师教给我们时,我总是会让思想开一

知识

化学实验总结怎么写(化学实验报告小结怎么写)

阅读(5393)

本文主要为您介绍化学实验总结怎么写,内容包括化学实验总结怎么写,化学实验报告小结怎么写,化学实验小结怎么写。化学实验报告的书写: 一般情况下化学实验报告是根据实验步骤和顺序从七方面展开来写的: 1.实验目的:即本次实验所要达到的目标或

知识

蝴蝶豌豆拼音怎么写(豌豆的拼音是什么)

阅读(5822)

本文主要为您介绍蝴蝶豌豆拼音怎么写,内容包括蝴蝶怎么拼音的,豌豆的拼音是什么,蝴蝶的拼音是什么。豌豆的拼音是[wān dòu]。豌豆是豆科一年生攀援草本,高0.5-2米。全株绿色,光滑无毛,被粉霜。叶具小叶4-6片,托叶心形,下缘具

知识

海绵宝宝用英文怎么说(海绵宝宝用英文怎么说)

阅读(6507)

本文主要为您介绍海绵宝宝用英文怎么说,内容包括海绵宝宝用英语怎么说,海绵宝宝用英文怎么说,海绵宝宝英文名是什么。1. SPONGEBOB SQUAREPANTS 近期很夯的一步卡通影片《海绵宝宝》(SpongeBob SquarePants)是一系

知识

茶盏怎么用(茶盏在茶道中干嘛用)

阅读(5420)

本文主要为您介绍茶盏怎么用,内容包括茶盏怎么用我要写一篇200字左右的茶盏的使用说明,求指教,茶盏在茶道中干嘛用,问一下斗笠盏如何使用现在是不是很少有人使用它,它的意义。苏东坡的名句"从来佳茗似佳人",典型地代表了唐宋及以后的文人墨客,

知识

thinkpad小红点怎么用(怎么学习使用thinkpad小红点)

阅读(7580)

本文主要为您介绍thinkpad小红点怎么用,内容包括怎么学习使用thinkpad小红点,thinkpad小红点怎么用,求教:THINKPAD的小红点使用方法。Thinkpad 小红点最高效的使用方法为:左手拇指按左键,无操作时在左键待命2、右手拇指按右键,同时兼按空格键及