如何编写一个计算单链表中结点个数程序

如何编写一个计算单链表中结点个数程序,第1张

给你一个完整的代码,包括链表的创建,输出和求链表长度

#include <stdioh>

#include <stdlibh>

typedef struct node

{

int data;

struct node next;

}NODE,List;

void initList(List L)

{

L = NULL;

}

List createList()

{

List head, p, q;

int flag;

head = (List)malloc(sizeof(NODE));

head->next = NULL;

q = head;

printf("请输入节点的值,输入字母终值输入: ");

flag = scanf("%d", &q->data);

while(flag)

{

p = (List)malloc(sizeof(NODE));

printf("请输入节点的值: ");

flag = scanf("%d", &p->data);

q->next = p;

p->next = NULL;

q = q->next;

}

return head;

}

int listLength(List L)

{

int count = 0;

List p = L;

while (p->next != NULL)

{

p = p->next;

count++;

}

return count;

}

void displayList(List L)

{

printf("链表中的元素为:\n");

while (L->next != NULL)

{

printf("%d ", L->data);

L = L->next;

}

printf("\n");

}

void main()

{

List L;

L = createList();

printf("链表的长度为: %d\n", listLength(L));

displayList(L);

}

呵呵!楼主应该是名在校大学生哦!

上课一定没有认真听课哦!这可是数据结构链表中最简单的哦!呵呵!

答案如下(C++代码):

#include <iostreamh>

struct node

{

int data; //定义单链表的数据类型为INT型

node next; //next指针指向下一个数据元素

};

node head; //定义head为全局结构类型

void add() //由于篇幅问题没有设计捕错函数

{

int number;

head=new node;

node p,s; //p为总是指向最后元素的指针

p=head;

cout<<"输入数字('0'结束)";

while(number) //循环向表中输入数据直到‘0’结束

{

cin>>number;

if(number!=0)

{

s=new node;

s->data=number;

p->next=s;

s->next=NULL;

p=s;

}

else

{

number=0;

}

}

}

void list() //显示表中的元素(注意此表为带有头节点的链表)

{

node listtemp=head;

while(listtemp->next)

{

cout<<listtemp->next->data<<" ";

listtemp=listtemp->next;

}

}

void main()

{

add();

list();

delete head;

}

呵呵!以上仅供参考!不过楼主以后可要认真听课了哦!呵呵!毕竟知识还是自己的好!

#include<stdioh>

#include<stdlibh>

typedef struct _Node

{

int data;

_Node next;

}Node,List;

int getMax_Value(List head)

{

if (head->next == NULL)

{

printf("链表中没有节点\n");

exit(-1);

}

Node ptr = head->next;

int max = ptr->data;

while (ptr->next != NULL)

{

ptr = ptr->next;

if (ptr->data > max)

{

max = ptr->data;

}

}

return max;

}

Node getMax_Address(List head)

{

if (head->next == NULL)

{

printf("链表中没有节点\n");

exit(-1);

}

Node ptr = head->next;

Node max_address = ptr;

while (ptr->next != NULL)

{

ptr = ptr->next;

if (ptr->data > max_address->data)

{

max_address = ptr;

}

}

return max_address;

}

List creatList(int num)//num为创建节点个数

{

List head = (Node)malloc(sizeof(Node));

head->data = 0;

head->next = NULL;

Node ptr = head;

Node node = NULL;

int data;

while (num)

{

printf("请输入节点则值:");

scanf("%d", &data);

node = (Node)malloc(sizeof(Node));

node->data = data;

node->next = NULL;

ptr->next = node;

ptr = node;

head->data++;

num--;

}

return head;

}

void freeList(List head)

{

Node ptr = head;

while (head)

{

head = ptr->next;

free(ptr);

ptr = head;

}

}

int main()

{

List head=creatList(5);

printf("链表的最大值为:%d\n", getMax_Value(head));

printf("链表最大值的地址为:0x%x,%d\n", getMax_Address(head), (getMax_Address(head))->data);

freeList(head);

return 0;

}

你那个next需是指针,next,

h = (struct student )malloc(sizeof(struct student));int i=1;

p1 = p2 = h;

while(i<3)

{p1=p2;

p2=p1->next;

p2= (struct student )malloc(sizeof(struct student)

}

电视仓库 单向链表程序如下:

/

/

package comzhh;

import javautilScanner;

/

@author zh520qx

@version 100

@Since Oct 9, 2013

/

public class TVLinkList{//完成电视链表的类

class Node{//内部结点

private String data;//定义data变量用于存储节点内容

private Node next;//保存下一节点

public Node(String data){//构造方法,设置节点内容

thisdata = data;

}

public void add(Node newNode){//将节点加入到合适的位置

if(thisnext ==null){//如果下一节点为空

thisnext = newNode;//则将节点放在next上

}else{//如果不为空

thisnextadd(newNode);//则需要继续向下查找next

}

}

public void print(){//打印出节点内容

Systemoutprint(thisdata + "\t");

if(thisnext!=null){//如果下一节点不为空

thisnextprint();//则继续调用print()方法打印出节点内容

}

}

public boolean search(String data){//查找节点内容

if(thisdata == null)

{

return false;

}

if(dataequals(thisdata)){//如果查找的节点与当前节点相同

return true;

}else{

if(thisnext!=null){//如果下一节点不为空

return thisnextsearch(data);//则继续向下查找

}else{

return false;

}

}

}

public void delete(Node pervious,String data){

if(thisdata == null)

{

return;

}

if(dataequals(thisdata)){//找到了匹配的节点

perviousnext = thisnext;//空出当前节点

}else{

if(thisnext!=null){

thisnextdelete(this,data);//进行继续查找

}

}

}

};

private Node root;//定义根节点

public void addNode(String data){//增加节点

Node newNode = new Node(data);//定义新的节点

if(thisroot == null){//如果根节点为空

thisroot = newNode;//将第一个节点设置为根节点

}else{//如果不为空

thisrootadd(newNode);//通过Node自动安排此节点的位置

}

}

public void printNode(){//输出链表中的全部内容

if(thisroot!=null){//如果根节点不为空

thisrootprint();//调用Node类的中输出 *** 作

}

}

public boolean contaits(String name){//判断元素是否存在

if(thisroot == null)

{

return false;

}

return thisrootsearch(name);//调用Node类中的查找方法

}

public void deleteNode(String data){

if(thiscontaits(data)){//判断查找的节点是否存在

if(thisrootdataequals(data)){

//一定要判断此元素是否与根元素相等

thisroot = thisrootnext;//将下一节点设置为根节点

}else{

thisrootnextdelete(root,data);//把下一节点的前一节点和数据一起传入进去

}

}

}

static Scanner scanner = new Scanner(Systemin);

static TVLinkList linkList = null;

public static void show()

{

print("===============百货商店·电视仓库系统===============", 1);

print("1、建立电视仓库", 1);

print("2、电视机查询", 1);

print("3、电视机入库", 1);

print("4、电视机出库", 1);

print("5、显示所有电视", 1);

print("6、退出系统", 1);

print("请选择 *** 作项:",2);

int action = scannernextInt();

switch (action)

{

case 1:

if(linkList == null)

{

linkList = new TVLinkList();

print("链表创建成功!", 1);

}else

{

print("链表已创建!", 1);

}

break;

case 2:

if(linkList == null)

{

print("请先创建链表!", 1);

}

else

{

print("请输入要查询的电视:", 2);

String s = scannernext();

if(linkListcontaits(s))

{

print(s + "电视有库存", 1);

}else

{

print(s + "电视不存在", 1);

}

}

break;

case 3:

if(linkList == null)

{

print("请先创建链表!", 1);

}

else

{

print("请输入要入库的电视:", 2);

String s = scannernext();

linkListaddNode(s);

print(s + "入库成功", 1);

}

break;

case 4:

if(linkList == null)

{

print("请先创建链表!", 1);

}

else

{

print("请输入要出库的电视:", 2);

String s = scannernext();

linkListdeleteNode(s);

print(s + "出库成功", 1);

}

break;

case 5:

if(linkList == null)

{

print("请先创建链表!", 1);

}

else

{

linkListprintNode();

print("", 1);

}

break;

case 6:

print("系统已退出", 2);

Systemexit(1);

break;

default:

break;

}

}

public static void print(String info,int flag)

{

if(flag == 1)

{

Systemoutprintln(info);

}

else

{

Systemoutprint(info);

}

}

public static void main(String[] args)

{

while(true)

{

show();

}

}

};

功能已经全部实现,具体你自己运行下程序, *** 作就知道了。

当然,如果真想派上用场,细节部分还得你自己优化。

有问题欢迎提问,吧!

以上就是关于如何编写一个计算单链表中结点个数程序全部的内容,包括:如何编写一个计算单链表中结点个数程序、编写打印出一个单链表的所有元素的程序,帮忙解决一下这个问题、C语言,编写程序。已知head指向一个带头结点的单向链表,链表中每个结点包含数据域(date)和指等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10181345.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-06
下一篇2023-05-06

发表评论

登录后才能评论

评论列表(0条)

    保存