带头结点的尾插法建立双链表
2011-12-20 20:52
281 查看
带头结点和不带头结点的尾插法建立双链表
一.带头结点的
先介绍存储数据类型为字符型的
view
plainprint?
//编程建立双链表(data为字符型数据)13-2-1ex3.cpp
//带头结点的双链表
#include<stdio.h>
#include<stdlib.h>
//#include<string.h>
//#include<conio.h>
//#define E_DEBUG
#ifdef E_DEBUG
#define PRINT printf
#else
#define PRINT(...) do{}while(0)
#endif
typedef char datatype;
typedef struct student
{
datatype data;
struct student *next;
struct student *pre;
}DNode;
DNode *create()
{
DNode *head, *p, *s;
datatype x, cycle=1;
head=(DNode *)malloc(sizeof(DNode));
p=head; //如果换成带头节点的链表。这里也不能变,切记,不能变成p=head->next;那就错了
printf("\nplease input the data:\n");
while(cycle)
{
scanf("%c",&x); //见后面注意2)
if(x!='#')
{
s=(DNode *)malloc(sizeof(DNode));
s->data=x;
PRINT("\n %c", s->data);
p->next=s;
s->pre=p;
p=s;
}
else
{
cycle=0;
}
}
p->next=NULL;
///head=head->next;//注意,这两句是不带头结点的双链表必须做的,因为按照算法。输入的第一个数实际上是赋值给了head->next
//head->pre=NULL;//所以,这就相当于头结点(head)里面没有值,所以要用这两步将head向后移一位,之前那个head就不要了。
PRINT("\nhead->data:%c\n",head->data);
return head;
}
int main()
{
DNode *p;
p=create();
p=p->next; //如果是带头节点的双链表建立,除了少了上面那个函数的末尾的步之外,多了这一步,保证从head的下一个节点输出链表data。
printf("\nnow out put the double linklist:\n");
while(p!=NULL)
{
printf("%3c", p->data);
p=p->next;
}
printf("\n");
system("pause");
return 0;
}
一.带头结点的
先介绍存储数据类型为字符型的
view
plainprint?
//编程建立双链表(data为字符型数据)13-2-1ex3.cpp
//带头结点的双链表
#include<stdio.h>
#include<stdlib.h>
//#include<string.h>
//#include<conio.h>
//#define E_DEBUG
#ifdef E_DEBUG
#define PRINT printf
#else
#define PRINT(...) do{}while(0)
#endif
typedef char datatype;
typedef struct student
{
datatype data;
struct student *next;
struct student *pre;
}DNode;
DNode *create()
{
DNode *head, *p, *s;
datatype x, cycle=1;
head=(DNode *)malloc(sizeof(DNode));
p=head; //如果换成带头节点的链表。这里也不能变,切记,不能变成p=head->next;那就错了
printf("\nplease input the data:\n");
while(cycle)
{
scanf("%c",&x); //见后面注意2)
if(x!='#')
{
s=(DNode *)malloc(sizeof(DNode));
s->data=x;
PRINT("\n %c", s->data);
p->next=s;
s->pre=p;
p=s;
}
else
{
cycle=0;
}
}
p->next=NULL;
///head=head->next;//注意,这两句是不带头结点的双链表必须做的,因为按照算法。输入的第一个数实际上是赋值给了head->next
//head->pre=NULL;//所以,这就相当于头结点(head)里面没有值,所以要用这两步将head向后移一位,之前那个head就不要了。
PRINT("\nhead->data:%c\n",head->data);
return head;
}
int main()
{
DNode *p;
p=create();
p=p->next; //如果是带头节点的双链表建立,除了少了上面那个函数的末尾的步之外,多了这一步,保证从head的下一个节点输出链表data。
printf("\nnow out put the double linklist:\n");
while(p!=NULL)
{
printf("%3c", p->data);
p=p->next;
}
printf("\n");
system("pause");
return 0;
}
相关文章推荐
- 建立带头结点的双向链表_尾插法
- 带头结点和不带头结点的尾插法建立双链表
- 编写算法实现建立一个带头结点的含n个元素的双向循环链表H,并在链表H中的第i个位置插入一个元素e
- C语言实现非循环双链表节点的删除(带头结点尾结点)
- 数据结构研究--尾插法创建带头结点的单链表
- 带头结点的双链表
- C语言实现单链表(带头结点)的基本操作(创建,头插法,尾插法,删除结点,打印链表)
- 不带头结点的单链表的建立
- 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 ② 实现该线性表的遍历。 ③ 在该单链表的第i个元素前插入一个整数。 ④ 删除该单链表中的第i个元素,其值通过参数将其返回。 ⑤ 建立两个
- 尾插法创建带头结点单链表(c语言版)
- 双链表的建立、求长、定位、插入、删除、输出和释放(带头结点且成环状)
- 带头结点单链表的建立
- 线性表学习归纳总结六:不带头结点的双链表
- C语言实现单链表(带头结点)的基本操作(创建,头插法,尾插法,删除结点,打印链表)
- C语言实现非循环双链表节点的删除(不带头结点)
- 分别用头插法和尾插法建立有头结点和无头结点的单链表
- 双链表的尾插法建立输出
- 带头结点和不带头结点的单链表的尾插法以及各种操作
- 【c++版数据结构】之双链表的实现(带头结点以及尾节点)
- 建立一个带头结点的的单向链表并输出到out53.dat和屏幕上。各节点的值为对应的下表。链表的节点数及输出地文件名作为参数传入