博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构-单向有头不循环链表基本实例
阅读量:6909 次
发布时间:2019-06-27

本文共 3244 字,大约阅读时间需要 10 分钟。

单向有头不循环链表

list.c

include 
#include
#include "list.h"//创建链表:创建一个空头链表//失败返回NULL,成功返回list指针list *list_create(){ list * me ; me = malloc(sizeof(*me));//创建头,申请空间 if(me == NULL)//如果申请失败,返回NULL return NULL; me->next = NULL ; return me ;}//按位置插入,一般不用//成功返回0int list_insert_at(list *me ,int i ,datatype *data){ int j = 0 ; list * node = me; list * newnode = NULL ; if(i < 0 )//如果位置号是错误的 return -1 ; while (( j < i ) && (node->next != NULL))//找到前驱 { node = node->next ; j++; } if(node !=NULL) { newnode = malloc(sizeof(*newnode)); if(newnode == NULL) return -2 ; newnode->data = *data ; newnode->next = node->next ; node->next = newnode ; return 0 ; } else return -3 ;}//按顺序插入int list_order_insert(list *me,datatype *data){ list *p = me ,*q; while(p->next && p->next->data < *data) p = p->next ; q = malloc(sizeof(*q)); if(q == NULL) return -1 ; q->data = *data ; q->next = p->next ; p->next = q ; return 0 ;}//带位置的删除int list_delete_at(list *me ,int i ,datatype *data){ list *p = me ,*q ; *data = 0 ; int j ; while (j < i && p) { p = p->next ; j++ ; } if(p) { q = p->next ; p->next = q->next ; *data = q->data; free(q); q = NULL; return 0 ; } else return -1 ;}//按照数据删除int list_delete(list *me ,datatype *data){ list *p = me , *q; q = malloc(sizeof(*q)); if(q == NULL) return -1 ; while(p->next && p->next->data != *data) p = p->next ; if(p->next == NULL) return -2 ; else { q = p->next ; p->next = q->next ; free(q); } return 0 ;}//是否为空int list_isempty(list *me){ if(me->next == NULL) return 0 ; return 1 ;}//遍历链表void list_display(list *me){ list *node = me->next;//因为头没有实际用处 if(list_isempty(me) == 0)//如果链表为空 return ; while(node != NULL) { printf("%d ",node->data); node = node->next ; } return ;}//销毁链表void list_destroy(list *me){ list *node ; list *next ; for(node = me->next ;node != NULL ; node = next) { next = node->next ; free(node); } free(me); return ;}
View Code

list.h

#ifndef LIST_H__#define LIST_H__typedef int datatype  ;typedef struct node_st{    datatype data ;    struct node_st *next ;}list;list *list_create();//创建链表int list_insert_at(list * ,int i ,datatype *);//带位置,一般不用int list_order_insert(list *,datatype *);//按顺序插入int list_delete_at(list * ,int i ,datatype *);//带位置的删除int list_delete(list * ,datatype *);//按照数据删除int list_isempty(list *);//是否为空void list_display(list *);//遍历链表void list_destroy(list *);//销毁链表#endif
View Code

main.c

/* *单向有头不循环链表 */#include 
#include
#include "list.h"int main(){ list *l = NULL ; int i ,err; datatype arr[]={
12,2,23,1,34,45,5}; l = list_create(); if(l == NULL) exit(1);// printf("%d",__LINE__); for(i = 0 ; i
View Code

Makefile

all:mainmain:main.o list.o    $(CC) $^ -o $@clean:    rm *.o main -rf
View Code

 

转载于:https://www.cnblogs.com/muzihuan/p/5232916.html

你可能感兴趣的文章
20165330 2017-2018-2 《Java程序设计》第3周学习总结
查看>>
jquery中的闭包
查看>>
CALayer上绘图
查看>>
string
查看>>
sql 语句整理
查看>>
mouse click with ctypes.windll and win32api
查看>>
running a notebook server on centos
查看>>
JS 正则表达式 0.001 ~99.999
查看>>
Mysql数据库的触发程序
查看>>
Android 开发笔记 “SharePreference 数据存取”
查看>>
C#常用IO流与读写文件
查看>>
record-05 函数
查看>>
ajax 跨域
查看>>
patch similarity
查看>>
WCF分布式开发步步为赢(1):WCF分布式框架基础概念
查看>>
一次编程中无意碰见的问题
查看>>
docker常用命令
查看>>
POJ 1979 红与黑
查看>>
Excel基础知识(一)
查看>>
网络编程 ------ 基础
查看>>