600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 数据结构与算法之单链表(1)

数据结构与算法之单链表(1)

时间:2020-11-02 19:42:06

相关推荐

数据结构与算法之单链表(1)

在说头插法建立单链表之前,先补充几个知识点:

用typedef定义类型:意思就是可以用typedef声明新的类型名来代替已有的类型名。

例如:

typedef struct

{

int month;

int day;

int year;

}DATE;

声明新类型名DATE,它代表上面指定的一个结构体类型。这是就可以用DATE定义变量: DATE birthday;

DATE *p; (p为指向此结构体类型数据的指针)

typedef int (*POINTER)() (声明POINTER为指向函数的指针类型,该函数返回整型值)

malloc函数:

其函数原型为 void *malloc(unsigned int size);其作用是在内存的动态存储区中分配一个长度为size的连续空间。此函数的值(即“返回值”)是一个指向分配域起始地址的指针(类型为void)。如果函数未能成功执行(例如内存空间不足),则返回空指针(NULL)。

1、建立单链表

假设线性表中结点的数据类型是字符,我们逐个输入这些字符型的结点,并以换行符'\n'为输入条件结束标志符。动态地建立单链表的常用方法有如下两种:

(1) 头插法建表

① 算法思路

从一个空表开始,重复读入数据,生成新结点,将读入数据存放在新结点的数据域中,然后将新结点插入到当前链表的表头上,直到读入结束标志为止。

整体程序如下:

#include<iostream>

using namespace std;

typedef struct node

{

char data;

struct node *next;//next是指针类型的成员,它指向struct node类型数据

}Listnode;

/*前插法创建单链表*/

Listnode *Createlist_former(void) //函数的返回值是指针类型,因为最后要返回链表的首地址

{

char ch;

Listnode *p,*head;

head=NULL;/*建立头结点*/

cout<<"Please input some char: ";

ch=getchar();

while (ch!='\n')

{

p=(Listnode *)malloc(sizeof(Listnode));

p->data=ch;

p->next=head;//因为是头插法,输入的第一个结点(每个结点包括两个部分:用户需要用的实际数据,下一个结点的地址)中的下一个结点的地址应为NULL;

head=p;//把第一个结点的起始地址赋给下一个结点(即第二个结点)此后类推

ch=getchar();

}

return head;

}

/*输出链表*/

void print_list(Listnode *head)

{

Listnode *p;

p=head;

while(p!=NULL)

{

cout<<p->data;

p=p->next;

}

}

char main()

{

Listnode *head;

head=Createlist_former();

cout<<"The print of list: ";

print_list(head);

cout<<endl;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。