Linux下学C语言——第十七节 数据结构

编程入门 行业动态 更新时间:2024-10-06 08:28:52

Linux下学C语言——第十七节 <a href=https://www.elefans.com/category/jswz/34/1769880.html style=数据结构"/>

Linux下学C语言——第十七节 数据结构

快捷键

mv 源文件名 目标文件名 //可以修改源文件名的名字

cp ../head/makefile  ./        //把上层目录下的head里的makefile文件拷贝到当前目录

 有头单向链表的实现

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

list.c 

#include <stdio.h>
#include <stdlib.h>#include "list.h"
list *list_create()
{list *me;me = malloc(sizeof(*me));if(me == NULL)return NULL;me -> next = NULL;return me;
}int list_insert_at(list *me,int i,datatype *data)
{int j= 0;list *node =me , *newnode;if(i<0)return -1;while(j<i && node != NULL){node = node ->next;j++;}if(node){newnode = malloc(sizeof(*newnode));if(newnode == NULL)return -2;newnode -> data = *data;newnode -> next = node->next;node->next = newnode;return 0;}elsereturn -3;}int list_order_insert(list *me,datatype *data)
{   list *p =me;list *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)
{int j=0;list *p=me,*q;*data = -1;while(j<i&&p){p = p->next;j++;}if(p){printf("5=====\n");q = p->next;p->next = q ->next;*data = q->data;free(q);q=NULL;printf("reurn=====\n");return 0;}printf("6=====\n");return -1;
}int list_delete(list *me,datatype *data)
{list *p = me,*q;while(p->next && p->next->data != *data)p = p->next;if(p->next == NULL)return -1;else{q= p->next ;p->next = q->next;free(q);q=NULL;}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;}printf("\n");return ;
}
void list_destroy(list *me)
{list *node ,*next;for(node = me->next;node != NULL; node = node -> next){next = node->next;free(node);}free(me);return ;
}

main.c 

 

#include <stdio.h>
#include <stdlib.h>#include "list.h"
int main()
{list *l;datatype arr[] = {12,4,8,23,34,9,45};int i;l = list_create();if(l == NULL)exit(1);for(i=0;i<sizeof(arr)/sizeof(*arr);i++){list_order_insert(l,&arr[i]);}list_display(l);datatype value ;int err = 0;printf("1=====\n");err = list_delete_at(l,3,&value);printf("err=====\n");if(err == -1){    printf("2=====\n");exit(1);}printf("3=====\n");list_display(l);printf("%d\n",value);printf("4=====\n");#if 0datatype value = 12;list_delete(l,&value);list_display(l);#endiflist_destroy(l);}

makefile:

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

 执行:

[tom@CentOS7 head]$ ./list 
4 8 9 12 23 34 45 
1=====
5=====
reurn=====
err=====
3=====
4 8 9 23 34 45 
12
4=====

更多推荐

Linux下学C语言——第十七节 数据结构

本文发布于:2024-02-28 02:15:53,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1767619.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数据结构   语言   第十七节   Linux

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!