链表的基本创建与输出

  由于链表在空间的合理利用上和插入、删除时不需要移动等的优点,因此在很多场合下,它是线性表的首选存储结构。

  以下只是利用一些简单的代码实现最基本的线性链表的创建与输出,若有错误,欢迎在下方评论指出。

 

一个带头结点的线性链表类型定义如下:

  

typedef struct LNode{//结点类型
  ElemType      data;              
  struct   LNode    *next;  
}*Link, *Position;

typedef struct {      //链表类型
    Link      head,tail;//分别指向线性链表中的头结点和最后一个结点
    int        len;         //指示线性链表中数据元素的个数
}LinkList;

....

以上的定义方法只供参考,真正实现线性链表的时候可以不用如此麻烦,但是初学者可以这样使用,可以帮助自己很方便的理解自己的代码,熟练过后就没有必要这样写了。

 

下面展示我所写的简单链表的创建与结点值输出:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #define OK 1
 4 #define OVERFLOW -2
 5 typedef int Status;                    //为Status创建int类型
 6 typedef int Elemtype;                //为Elemtype创建类型
 7 typedef struct LNode                //声明结构体类型
 8 {
 9     Elemtype data;                    //定义结点值类型
10     struct LNode *next;                //定义链表LNode的下一结点指针
11 }LNode, *Linklist;                    //定义结构体变量
12 
13 Status InitLinklist(Linklist *L)    //创建空的线性链表L
14 {
15     Linklist p;                        //
16     p=(LNode *)malloc(sizeof(LNode));//扩大线性链表空间
17     if(!p)                            //判断结点是否创建成功,可省略
18         exit(OVERFLOW);
19     p->next=NULL;
20     *L=p;
21     return OK;
22 }
23 
24 Status CreatLinklist(Linklist *L,int n)//创建以L为头结点的线性链表,n为结点个数
25 {
26     Linklist pi,ptail;                    //定义两个结构体变量,pi用于遍历链表,ptail用于记录尾结点
27     int i;
28     ptail=*L;
29     for(i=0;i<n;i++)
30     {
31         pi=(LNode *)malloc(sizeof(LNode));//扩大链表空间
32         scanf("%d",&pi->data);              //依次输入结点值
33         ptail->next=pi;                      //将pi插入到表尾
34         ptail=ptail->next;
35     }
36     pi->next=NULL;                          //将尾结点置为空
37     return OK;
38 }
39 void printLinklist(Linklist *L)              //输出链表的函数
40 {
41     Linklist p;
42     p=(*L)->next;
43     while(p)
44     {
45         printf("%d ",p->data);
46         p=p->next;
47     }
48 }
49 
50 int main()
51 {
52     int i;
53     Linklist L;
54     InitLinklist(&L);
55     printf("请输入链表结点个数:");
56     scanf("%d",&i);
57     CreatLinklist(&L,i);
58     printf("链表中的结点值为:");
59     printLinklist(&L);
60     printf("\n");
61     return 0;
62 }

 

运行后的结果是这样的:

(这是VC6的 编译器)

 

posted @ 2018-12-20 21:30  myjoker  阅读(2290)  评论(0)    收藏  举报