考研党 数据结构(严蔚敏)List基本操作(纯C语言,与教材一致)
来源:互联网 发布:网络销售股票是否违法 编辑:程序博客网 时间:2024/05/18 10:50
考研党 数据结构(严蔚敏)List基本操作(纯C语言,与教材一致)
本代码示例为纯c语言编写的List基本操作,与数据结构(严蔚敏)课本讲述内容一致,可用于考研同学复习数据结构。
/*linklist.h*/#ifndef _LINKLIST_H_#define _LINKLIST_H_#include <stdio.h>#include <stdlib.h>#define TRUE 1#define FALSE 0#define OK 0#define ERROR -1;typedef int ElemType;typedef struct SNode{ ElemType data; struct SNode *next; }Node,*Node_Ptr;typedef struct SList{ Node* head; int length;}LinkList;//便于理解定义链表类型/*函数声明*/ElemType Input();void Init(LinkList *list);void Insert(LinkList* list, int pos, ElemType e);void Delete(LinkList* list, ElemType e);void PrintElem(ElemType e);void Print(LinkList list);void Clear(LinkList* list);void Destory(LinkList* list);int IsEmpty(LinkList list);int GetLength(LinkList list);/*函数定义*//*初始化链表*/void Init(LinkList *list){ Node* pHead = (Node*)malloc(sizeof(ElemType)); if(!pHead) { printf("error:malloc is NULL\n"); exit(-1); } pHead->next = NULL; list->head = pHead; list->length = 0;}/*获取链表长度,返回int,也就是长度值*/int GetLength(LinkList list){ return list.length;}/*返回int型,TRUE表示链表为NULL,FALSE表示链表非空*/int IsEmpty(LinkList list){ if(list.length == 0) { return TRUE; } else { return FALSE; }}/*打印单个元素*/void PrintElem(ElemType e){ printf("%-4d",e);}/*打印链表*/void Print(LinkList list){ if( IsEmpty(list) ) { printf("List is Empty\n"); return; } Node* p = list.head; p = p->next; while(p != NULL) { PrintElem(p->data); p = p->next; } printf("\n"); }/*插入元素,参数1:传入链表地址,参数2:插入位置,参数3:插入元素值*/void Insert(LinkList* list, int pos, ElemType e ){ if(pos < 1) pos = 1; else if( pos > list->length) pos = list->length+1; Node* p = list->head; while(--pos) { p = p->next; } Node* pNew = (Node*)malloc(sizeof(ElemType)); pNew->data = e; pNew->next = NULL; if(p != NULL) { pNew->next = p->next; p->next = pNew; } else { p->next = pNew; } list->length++; return;}/*删除元素,参数1:传入链表地址,参数2:要删除的元素值*/void Delete(LinkList* list, ElemType e){ Node* p = list->head; Node* q = p->next; while(q != NULL && q->data !=e ) { p = p->next; q = q->next; } if(q == NULL) { printf("No Found this element \n"); return; } p->next = q->next; free(q); q = NULL; list->length--;}/*输入单个元素,返回值为元素类型用于接收元素*/ElemType Input(){ printf("input Element:"); ElemType e = 0; scanf("%d",&e); getchar(); return e;}/*清空链表元素*/void Clear(LinkList* list){ Node* p = list->head; Node* q = p->next; while(q != NULL) { p->next = q->next; free(q); q=p->next; list->length--; //Print(*list); }}/*销毁链表,链表不在可用,如果要继续使用,需要再次初始化*/void Destory(LinkList* list){ Clear(list); Node* p = list->head; free(p); p = NULL; printf("List is destoried\n");}#endif
/*main.c用于测试*/#include <stdio.h>#include <stdlib.h>#include <stdlib.h>#include "LinkList.h"int main(int argc, char *argv[]){ int i = 0, pos = 0; ElemType e = 0; LinkList list; Init(&list); for(i=0;i<10;i++) { pos = rand()%10; e = i; printf("insert e=%d to pos=%d\t",e,pos); Insert(&list, pos, e); Print(list); } printf("list length %d\n",GetLength(list)); //删除值为5的元素 printf("after delete Element's value is 5\n"); Delete(&list, 5); Print(list); printf("list length %d\n",GetLength(list)); //再一次删除5的元素,无法找到。 printf("again delete Element's value is 5\n"); Delete(&list, 5); printf("list length %d\n",GetLength(list)); Destory(&list); return 0;}
代码编译使用软件为Dev-cpp,代码与实际开发一定有不同,但是写代码的目的主要是为了理解数据结构的思想并掌握它。
文件结构
linklist.h(定义List基本操作)
main.c(编写main函数进行测试)
祝愿18考研学生成功。
阅读全文
0 0
- 考研党 数据结构(严蔚敏)List基本操作(纯C语言,与教材一致)
- 考研党 数据结构(严蔚敏)Stack基本操作(纯C语言,与教材一致)
- 考研党 《数据结构(C语言版)》 严蔚敏Queue基本操作
- 考研党 《数据结构(C语言版)》 严蔚敏BiTree基本操作
- 数据结构中顺序表的基本操作(纯C语言)
- <数据结构与算法>二叉搜索树(BST)的基本操作(C语言描述)
- 数据结构C语言实现线性表(顺序实现)的初始化与基本操作
- 数据结构—单链表的部分基本操作(C语言)
- 数据结构 (C语言)顺序表的基本操作
- C语言(数据结构) - 链表的基本操作
- C语言(数据结构) - 双向链表的基本操作
- 数据结构--单链表的基本操作(C语言实现)
- 数据结构--单链表的基本操作(C语言实现)
- 数据结构 线性表的基本操作(C语言)
- 数据结构 链表的基本操作(C语言)
- 数据结构循环队列的基本操作(C语言)
- 数据结构栈的基本的操作(C语言)
- 《数据结构与算法》-单链表基本操作的C语言实现
- js对数组按顺序排序
- OPC开发相关知识
- 基于位置服务的信息推送系统设计
- JavaScript/Jquery返回顶部代码
- css实现文本多行省略
- 考研党 数据结构(严蔚敏)List基本操作(纯C语言,与教材一致)
- redis的主从复制,读写分离,主从切换
- java开发系统内核:使用C语言开发系统应用程序
- js高级程序-url处理
- 欢迎使用CSDN-markdown编辑器
- Android 注解实现权限管理 APP不再对onRequestPermissionsResult进行操作
- 多线程编程---线程死锁
- Kotlin让属性只能被赋值一次且不能为空
- 总结HTML中不经常使用的标签