1.2数据结构->线性表->链表
来源:互联网 发布:mac os x 10.7.4升级 编辑:程序博客网 时间:2024/06/06 09:16
参考《大话数据结构》:
环境:ubuntu16.04 vim
文件名称:sqlist.h sqlist.c main.c Makefile(放到同一个目录下)
实现功能:链表的初始化、头部插入和尾部插入,链表清空和链表遍历
1、linklist.h头文件
#ifndef __LINKLIST_HEAD__#define __LINKLIST_HEAD__#include <stdio.h>#include <stdlib.h>#define MAXSIZE 20#define OK 0#define ERROR -1#define TRUE 1#define FALSE 0typedef int ElemType;typedef int Status;/*单链表的存储结构*/typedef struct Node{ ElemType data; struct Node *next;}Node;typedef struct Node *LinkList; //定义LinkList/**初始化一个空的节点*L [IN, OUT]进行操作的链表*/extern Status ListInit(LinkList *L);/**新建一个链表节点并插入到头部,俗称头插法*L [IN, OUT]进行操作的链表*e [IN]插入到节点的数据*/extern Status AddListHead(LinkList *L, ElemType e);/**新建一个链表节点并插入到尾部,俗称尾插法*L [IN, OUT]进行操作的链表*e [IN]插入到节点的数据*/extern Status AddListTail(LinkList *L, ElemType e);/**将链表置为空表*L [IN, OUT]要操作的链表*/extern Status ClearList(LinkList *L);/**遍历表中的每一个节点*L [IN]要操作的链表*/extern void TraverseList(LinkList L);#endif
2、linklist.c文件
#include "linklist.h"/*初始化一个空节点*/Status ListInit(LinkList *L){ (*L) = (LinkList)malloc(sizeof(Node)); if ((*L) == NULL) { printf("malloc failed!\n"); return ERROR; } (*L)->data = 0; (*L)->next = NULL; return OK;}/*头插法*/Status AddListHead(LinkList *L, ElemType e){ LinkList s; if (!(*L)) { return ERROR; } s = (LinkList)malloc(sizeof(Node)); s->data = e; s->next = (*L)->next; (*L)->next = s; return OK;}/*尾插法*/Status AddListTail(LinkList *L, ElemType e){ LinkList p, s; p = *L; if (!p) { return ERROR; } while (p->next != NULL) { p = p->next; } s = (LinkList)malloc(sizeof(Node)); s->data = e; s->next = p->next; p->next = s; return OK;}/*删除整张表*/Status ClearList(LinkList *L){ LinkList p, q; p = (*L)->next; while(p) { q = p->next; free(p); p = q; } (*L)->next = NULL; printf("链表置为空!\n"); return OK;}/*遍历表中的数据*/void TraverseList(LinkList L){ LinkList p; p = L; if (p->next == NULL) { printf("链表为空表!\n"); } while(p->next != NULL) { printf("p->data:%d\n", p->data); p = p->next; } printf("p->data:%d\n", p->data);}
3、main.c
#include "linklist.h"int main(){ LinkList L = NULL; if (ListInit(&L)) { printf("ListInit failed!\n"); return ERROR; } /*插入表中一个节点*/ ElemType e = 1; if (AddListHead(&L, e)) { printf("Add Node failed!\n"); return ERROR; } ElemType f = 2; if (AddListHead(&L, f)) { printf("Add Node failed!\n"); return ERROR; } /*遍历表中的数据*/ printf("**************\n"); TraverseList(L); printf("**************\n"); /*尾插法*/ ElemType g = 3; if (AddListTail(&L, g)) { printf("Add Node Tail failed!\n"); return ERROR; } ElemType h = 4; if (AddListTail(&L, h)) { printf("Add Node Tail failed!\n"); return ERROR; } /*遍历表中的数据*/ printf("**************\n"); TraverseList(L); printf("**************\n"); /*将链表置为空*/ if (ClearList(&L)) { printf("Clear List failed!\n"); return ERROR; } /*遍历表中的数据*/ printf("**************\n"); TraverseList(L); printf("**************\n"); return OK;}
4、Makefile文件
#Makefile for building programmingsOBJS=linklist.o main.oCC=gccCFLAGS=-Wall -gTARGET=linklistTARGET:$(OBJS) $(CC) $(OBJS) -o $(TARGET)linklist.o:linklist.c linklist.h $(CC) $(CFLAGS) -c $< -o $@main.o:main.c linklist.h $(CC) $(CFLAGS) -c $< -o $@.PHONY:cleanclean: rm *.o linklist5、执行结果
0 0
- 1.2数据结构->线性表->链表
- 数据结构-线性表-链表
- 数据结构-线性表-链表
- 数据结构 线性表/链表
- 数据结构之线性表----链表
- 数据结构学习 线性表 链表
- 【数据结构】链表 YTU 2201 逆置线性表(线性表)
- 线性数据结构(线性表、链表、栈、队列、散列表)
- 数据结构与算法3:线性结构与线性表-链表
- java数据结构 线性表,链表,哈希表
- 基本数据结构之线性表-链表
- 数据结构之线性表(链表)
- 数据结构之线性表 -- 链表(总括)
- 数据结构(王道)【线性表】【算法1.1-1.2】
- 数据结构拾遗---线性表
- 整理--数据结构--线性表
- 数据结构(线性表)
- 整理--数据结构--线性表
- MapReduce 中的类
- 纯素数(easy)
- iOS 如何完整复制另一个视图控制器的内容
- 润乾报表如何在工具栏中增加总记录数和本页记录数显示
- C++成员变量、构造函数的初始化顺序
- 1.2数据结构->线性表->链表
- 管线命令与分号连续下达命令区别
- 前端图像处理指南
- 在iptables防火墙下开启vsftpd的端口
- android material design之点击波纹效果(ripple)
- oc-Foundation_03_NSEnumerator
- plist文件生成及使用(帧动画实现)
- java多线程基础知识(二)
- Java实现tcp