c语言创建单链表主函数,c语言创建单向链表

用c语言创建链表

主函数这里

创新互联主营汉台网站建设的网络公司,主营网站建设方案,手机APP定制开发,汉台h5小程序开发搭建,汉台网站营销推广欢迎汉台等地区企业咨询

Linklist List;

printf("输入创建链表的长度:");

scanf("%d",num);

CreateList_H(List,num); //创建链表

改为 

LNode List;

printf("输入创建链表的长度:");

scanf("%d",num);

CreateList_H(List,num); //创建链表

函数内在堆上分配好内存,但是 没有传递到栈上

另外 你的变量名很迷人

c语言用函数创建单链表

#includestdio.h

#includestdlib.h

//链表定义

typedef int ElemType;

typedef struct LNode

{

int data;

struct LNode *next;

}LNode,*LinkList;

/*************************************

* 链表函数 *

*************************************/

//链表初始化

void InitLink(LinkList L);

//创建函数,尾插法

void CreateLink_T(LinkList L,int n);

//创建函数,头插法

void CreateLink_H(LinkList L,int n);

//销毁函数

void DestroyLink(LinkList L);

//判断是否为空函数

bool EmptyLink(LinkList L);

//获取函数

bool GetLink(LinkList L,int i,int e);

//插入函数

void InsertLink(LinkList L,int i,int e);

//删除函数

void DeleteLink(LinkList L,int i,int e);

//遍历函数

void TraverseLink(LinkList L);

//链表长度函数

int LengthLink(LinkList L);

//合并函数

void MergeLink(LinkList L1,LinkList L2);

void main()

{

LinkList L1,L2;

InitLink(L1);

InitLink(L2);

CreateLink_H(L1,2);

CreateLink_T(L2,2);

TraverseLink(L1);

printf("\n");

TraverseLink(L2);

printf("\n");

MergeLink(L1,L2);

TraverseLink(L1);

TraverseLink(L2);

}

//创建函数,尾插法

void InitLink(LinkList L)

{

L=(LinkList)malloc(sizeof(LNode));

if (!L)

{

printf("Init error\n");

return;

}

L-next=NULL;

}

void CreateLink_T(LinkList L,int n)

{

if(n1)

{

printf("n must =1\n");

return ;

}

else

{

// L=(LinkList)malloc(sizeof(LNode));

L-next=NULL;

for(int i=0;in;i++)

{

LinkList p=(LinkList)malloc(sizeof(LNode));// the lower letter p

printf("enter the data :\t");

scanf("%d",(p-data));

p-next=L-next;

L-next=p;

}

}

}

//创建函数,头插法

void CreateLink_H(LinkList L,int n)

{

if (n1)

{

printf("n must =1\n ");

return;

}

else

{

//L=(LinkList)malloc(sizeof(LNode));

LinkList pre=(LinkList)malloc(sizeof(LNode));

L-next=NULL;

pre=L;

for(int i=0;in;i++)

{

LinkList p=(LinkList)malloc(sizeof(LNode));

printf("enter the data:\t");

scanf("%d",(p-data));

pre-next=p;

pre=p;

}

pre-next=NULL;

}

}

//销毁函数

void DestroyLink(LinkList L)

{

LinkList q=L,p=L;

while (p)

{

q=p;

p=p-next;

free(q);

}

L-next=NULL;

}

//判断是否为空函数

bool EmptyLink(LinkList L)

{

if (NULL==L-next)

{

return true;

}

else

{

return false;

}

}

//获取函数

bool GetLink(LinkList L,int i,int e)

{

if (i1)

{

return false;

}

else

{

if (EmptyLink(L))

{

return false;

}

LinkList p=L-next;

int j=1;

while(pji)

{

p=p-next;

j++;

}

if (!p||ji)

{

return false;

}

else

{

e=p-data;

return true;

}

}

}

//插入函数

void InsertLink(LinkList L,int i,int e)

{

if (i0||iLengthLink(L))

{

printf("Insert error\n");

return;

}

else

{

LinkList p=L;

int j=0;

while(p(ji))

{

p=p-next;

j++;

}

if (!p||ji)

{

printf("Insert error\n");

return;

}

else

{

LinkList q=(LinkList)malloc(sizeof(LNode));

q-data=e;

q-next=p-next;

p-next=q;

}

}

}

//删除函数

void DeleteLink(LinkList L,int i,int e)

{

if(i=0||iLengthLink(L))

{

printf("delete error\n");

return;

}

else

{

LinkList p=L;

int j=0;

while(pji-1)

{

p=p-next;

j++;

}

if(!p||ji)

{

printf("please enter i again\n");

return;

}

else

{

LinkList q=p-next;

e=p-next-data;

p-next=p-next-next;

free(q);

}

}

}

//遍历函数

void TraverseLink(LinkList L)

{

LinkList p=L-next;

if(!p)

{

printf("the Link L is empty\n");

}

while(p)

{

printf("%d\n",p-data);

p=p-next;

}

}

//链表长度函数

int LengthLink(LinkList L)

{

int i=0;

LinkList p=L-next;

while(p)

{

p=p-next;

i++;

}

return i;

}

//合并函数

void MergeLink(LinkList L1,LinkList L2)

{

int i=0,flag=0;

LinkList p1=L1-next,p2=L2-next;

LinkList p=(LinkList)malloc ((LengthLink(L1)+LengthLink(L2)+2)*sizeof(LNode));

LinkList pre=p;

if (!p)

{

printf("MergeLink error\n");

return;

}

p-next=NULL;

while (p1p2)

{

if (p1-data=p2-data)

{

InsertLink(p,i++,p2-data);

p2=p2-next;

}

else

{

InsertLink(p,i++,p1-data);

p1=p1-next;

}

}

while (p1)

{

InsertLink(p,i++,p1-data);

p1=p1-next;

}

while(p2)

{

InsertLink(p,i++,p2-data);

p2=p2-next;

}

while(pre)

{

pre=pre-next;

}

LinkList q=L1;

L1=p;

DestroyLink(q);

DestroyLink(L2);

}

C语言主函数建立一条单向链表

#include stdio.h

#include malloc.h#define N 5

typedef struct LNode

{

double data;

long number;

struct LNode *next;

}LNode,*LinkList;LinkList fun(LinkList L,double *aver)

{

LinkList p,q,h;

double sum=0;

p=L-next;

while(p!=NULL)

{

sum+=p-data;

p=p-next;

}

sum=sum/N;

*aver = sum;

printf("aver=%.2f\n",*aver);

p=L-next;

h=(LinkList)malloc(sizeof(LNode));

h-next = NULL;

while(p!=NULL)

{

if(p-data=sum)

{

q=(LinkList)malloc(sizeof(LNode));

q-number = p-number;

q-data=p-data;

q-next = h-next;

h-next = q;

}

p=p-next;

}

return h;

}

void main()

{

LinkList L,p,h;

int i;

double aver;

L= (LinkList)malloc(sizeof(LNode));

L-next = NULL;

printf("创建链表...\n输入学生的学号和成绩:\n");

for( i=0;iN;i++)//逆位序输入N个元素的值,建立带头结点的单链表L

{

p=(LinkList)malloc(sizeof(LNode));

scanf("%d %lf",p-number,p-data);

p-next=L-next;

L-next=p;

}

h=fun(L,aver);

printf("平均成绩为:%.2f\n",aver);

p=h-next;

printf("大于或等于平均成绩的学生信息...\n");

printf("学号 成绩\n");

while(p!=NULL)

{

printf("%-12d %-3.2f\n",p-number,p-data);

p=p-next;

}

printf("\n");

}

关于C语言单向链表,编写一个主函数,要求用函数实现如下功能:

#includeiostream

using namespace std;

class Node {

public:

int data;

Node* next;

Node(int _data) {

data = _data;

next = NULL;

}

};

class LinkList {

private:

Node* head;

public:

LinkList() {

head = NULL;

}

void insert(Node *node, int index) {

if (head == NULL) {

head = node;

return;

}

if (index == 0) {

node-next = head;

head = node;

return;

}

Node *current_node = head;

int count = 0;

while (current_node-next != NULL  count  index - 1) {

current_node = current_node-next;

count++;

}

if (count == index - 1) {

node-next = current_node-next;

current_node-next = node;

}

}

void output() {

if (head == NULL) {

return;

}

Node *current_node = head;

while (current_node != NULL) {

cout  current_node-data  " ";

current_node = current_node-next;

}

cout  endl;

}

void delete_node(int index) {

if (head == NULL) {

return;

}

Node *current_node = head;

int count = 0;

if (index == 0) {

head = head-next;

delete current_node;

return;

}

while (current_node-next != NULL  count  index -1) {

current_node = current_node-next;

count++;

}

if (count == index - 1  current_node-next != NULL) {

Node *delete_node = current_node-next;

current_node-next = delete_node-next;

delete delete_node;

}

}

void reverse(){

if(head == NULL){

return;

}

Node *next_node,*current_node;

current_node = head-next;

head-next = NULL;

while(current_node != NULL){

next_node = current_node-next;

current_node-next = head;

head = current_node;

current_node = next_node;

}

}

};

int main() {

LinkList linklist;

for (int i = 1; i = 10; i++) {

Node *node = new Node(i);

linklist.insert(node, i - 1);

}

linklist.output();

linklist.delete_node(3);

linklist.output();

linklist.reverse();

linklist.output();

return 0;

}

C语言如何创建单链表?

C语言创建单链表如下:

#include"stdio.h"

#include"stdlib.h"

#include"malloc.h"

#include "iostream.h"

typedef struct node

{

int  data;

node * next;

}node , * List;

void create(int n)

{

int c;

List s,L;

L=(List)malloc(sizeof(node));

L-next=NULL;

printf("请输入第1个数据:");

scanf("%d",c);

L-data=c;

for(int i=2;i=n;i++)

{

s=(List)malloc(sizeof(node));

printf("请输入第%d个数据:",i);

scanf("%d",c);

s-data=c;

s-next=L;

L-next =s;

}

printf("链表创建成功!");

}

void main()

{

int n;

printf("请你输入链表的个数:");

scanf("%d",n);

create(n);

}

单链表创建方法:

单链表的建立有头插法、尾插法两种方法。

1. 头插法

单链表是用户不断申请 存储单元和改变链接关系而得到的一种特殊 数据结构,将链表的左边称为链头,右边称为链尾。头插法建单链表是将链表右端看成固定的,链表不断向左延伸而得到的。头插法最先得到的是尾结点。

由于链表的长度是随机的,故用一个while循环来控制链表中结点个数。假设每个结点的值都大于O,则循环条件为输入的值大于o。申请 存储空间可使用malloc()函数实现,需设立一申请单元 指针,但malloc()函数得到的指针并不是指向 结构体的指针,需使用 强制类型转换,将其转换成结构体型指针。刚开始时,链表还没建立,是一空链表,head 指针为NULL。

链表建立的过程是申请空间、得到数据、建立链接的循环处理过程。

2. 尾插法

若将链表的左端固定,链表不断向右延伸,这种建立链表的方法称为尾插法。尾插法建立链表时,头 指针固定不动,故必须设立一个搜索指针,向链表右边延伸,则整个算法中应设立三个链表指针,即头指针head、搜索指针p2、申请单元指针pl。尾插法最先得到的是 头结点。

名称栏目:c语言创建单链表主函数,c语言创建单向链表
文章来源:https://www.cdcxhl.com/article22/dsgdhjc.html

成都网站建设公司_创新互联,为您提供App开发网站设计ChatGPT微信公众号做网站品牌网站制作

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

搜索引擎优化