链表的基本创建与输出
由于链表在空间的合理利用上和插入、删除时不需要移动等的优点,因此在很多场合下,它是线性表的首选存储结构。
以下只是利用一些简单的代码实现最基本的线性链表的创建与输出,若有错误,欢迎在下方评论指出。
一个带头结点的线性链表类型定义如下:
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的 编译器)

浙公网安备 33010602011771号