本文将描述C语言实现单向链表和双向链表的创建、输出操作方法。
单向链表
单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始;链表是使用指针进行构造的列表;又称为结点列表,因为链表是由一个个结点组装起来的;其中每个结点都有指针成员变量指向列表中的下一个结点;
列表是由结点构成,head指针指向第一个成为表头结点,而终止于最后一个指向nuLL的指针。
程序实现如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct student {
int num;
struct student *Next;
}*LinkList;
struct student *CreatList(int n){
int i,a;
LinkList p1,p2,head;
head = NULL;
printf("请输入元素值:\n");
for(i=0;i<n;i++){
p1 = (struct student *)malloc(sizeof(struct student));
scanf("%d",&a);
p1->num = a;
if(head == NULL){
head = p1;
}
else{
p2->Next =p1;
}
p2 = p1;
}
p1->Next = NULL;
return head;
}
int main(int argc, char *argv[]) {
int n;
LinkList p;
printf("请输入节点个数:\n");
scanf("%d",&n);
p = CreatList(n);
printf("该链表为:\n");
while(p!=NULL){
printf("%d\t",p->num);
p = p->Next;
}
getch();
return 0;
}
输出窗口为:
双向链表
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。
程序实现如下:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct student {
int num;
struct student *Prior,*Next;
}*LinkList;
struct student *CreatList(int n){
int i;
LinkList p1,p2,head;
head = (LinkList)malloc(sizeof(struct student));
head->num = 0;
head->Prior = NULL;
head->Next = NULL;
p2 = head;
printf("请输入元素值:\n");
for(i=0;i<n;i++){
p1 = (LinkList)malloc(sizeof(struct student));
scanf("%d",&(p1->num));
p2->Next = p1;
p1->Prior = p2;
p1->Next = NULL;
p2 = p1;
}
p1->Next = NULL;
return head;
}
int main(int argc, char *argv[]) {
int n;
LinkList p,head;
printf("请输入节点个数:\n");
scanf("%d",&n);
head = CreatList(n);
p = head->Next;
printf("该双向链表为:\n");
while(p){
printf("%d\t",p->num);
p = p->Next;
}
getch();
return 0;
}
输出窗口为: