C语言 带头结点的单链表
来源:互联网 发布:2017淘宝虚假交易规则 编辑:程序博客网 时间:2024/06/06 03:43
初学者,有错误请指正,谢谢!
C语言带头结点的单链表实现:
#include<stdio.h>#include<stdlib.h>#include<time.h>#define elem 0typedef int ElemType;typedef int Status;typedef struct LNode{ ElemType data; struct LNode *next;}LNode,*PNode;typedef struct List{ PNode head,tail; int len;}List,*LinkList;//创建结点PNode MakeNode(ElemType e){ PNode p=(PNode)malloc(sizeof(LNode)); if(!p)exit(0); p->data=e; p->next=NULL; return p;}//创建空链表LinkList CreateEmpList(){ LinkList L=(LinkList)malloc(sizeof(LinkList)); if(!L)exit(0); L->head=NULL; L->tail=NULL; L->len=0; return L;}//链表尾插入元素LinkList AddEnd(LinkList L,PNode p){ if(!L||!p)exit(0); if(L->len==0){ L->head=p; L->tail=p; p->next=NULL; L->len=1; return L; } L->tail->next=p; p->next=NULL; L->tail=p; ++L->len; return L;}//链表头插入元素LinkList AddHead(LinkList L,PNode p){ if(!L||!p)exit(0); if(L->len==0){ L->head=p; L->tail=p; p->next=NULL; L->len=1; return L; } p->next=L->head; L->head=p; ++L->len; return L;}//创建i个结点链表LinkList CreateList(int i){ PNode p=NULL; LinkList L=NULL; int j,k; L=CreateEmpList(); for(j=0;j<i;j++){ //scanf("%d",&k); k=rand()%81+10; p=MakeNode(k); L=AddEnd(L,p); } return L;}//链表是否为空Status IsEmpty(LinkList L){ if(!L)exit(0); if(L->len) return 0; return 1;}//返回指定位置结点PNode LocatePos(LinkList L,int pos){ PNode p=L->head; int i=0; if(!L||pos>L->len||pos<=0) return NULL; for(i=0;i<pos;i++) p=p->next; return p;}//插入元素LinkList InsertNode(LinkList L,int pos,ElemType e){ int i; if(!L||pos<1||pos>L->len)return NULL; PNode newnode=MakeNode(e); PNode tp=MakeNode(elem); tp->next=L->head; PNode p=tp; for(i=1;i<pos;++i) p=p->next; newnode->next=p->next; p->next=newnode; ++L->len; free(tp); return L;}//遍历链表void TraverseList(LinkList L){ PNode p=L->head; if(!L)return ; while(p){ printf("Element is %d\n",p->data); p=p->next; }}//删除表尾元素LinkList DeleteTail(LinkList L){ PNode p=NULL,t=NULL; if(!L||!L->tail) exit(0); p=L->head; while(p->next->next){ p=p->next; } t=p->next; p->next=NULL; free(t); L->tail=p; --L->len; return L;}//销毁链表void DestroyList(LinkList L){ PNode q,p=L->head->next; while(p!=L->tail){ q=p; p=q->next; free(q); } free(L); L=NULL; printf("Destroyed.\n");}int main(){ srand((unsigned)time(NULL)); //LinkList L=CreateEmpList(); //int n=5; //while(n--) // AddEnd(L,MakeNode(rand()%81+10)); LinkList L=CreateList(3); TraverseList(L); L=InsertNode(L,2,0); TraverseList(L); L=DeleteTail(L); TraverseList(L); DestroyList(L); return 0;}
0 0
- C语言 带头结点的单链表
- 不带头结点的单链表的实现(C语言)
- C语言实现单链表(带头结点)的基本操作
- C语言实现单链表节点的删除(带头结点)
- C语言实现单链表的节点插入(带头结点)
- C语言实现单链表的逆序打印(带头结点)
- C语言实现单链表-不带头结点
- 带头结点的单链表实现(C++)
- 带头结点的单链表
- 带头结点的单链表
- 带头结点的单链表
- 带头结点的链队列实现(C语言)
- 带头结点的链队列实现(C语言)
- 带头结点的链队列实现(C语言)
- 数据结构模版----单链表SimpleLinkList[带头结点](C语言实现)
- 数据结构模版----单链表SimpleLinkList[不带头结点](C语言实现)
- C语言实现单链表(不带头结点)
- 不带头结点的 单链表的各种操作实现c语言
- 信息论与编码 上机
- 对象与类的认识
- Apache与php在Windows下配置安装
- HDU 2002 计算球体积
- 关于vs2013做c语言scanf出现警告的问题
- C语言 带头结点的单链表
- leetcode--Min Stack
- linux 怎样查找某个文件或目录属于哪个分区的。
- linux调度器源码分析 - 初始化(二)
- Android自定义控件
- iOS开发数据持久化技术02——plist介绍
- 高效位运算 __builtin_系列函数
- 我火狐浏览器的好多TMP的临时文件都跑桌面来了,怎么修改存放地方啊?
- 编译错误:undefined reference to `clock_gettime'