C语言 头指针单链表
来源:互联网 发布:苹果5s支持4g网络吗 编辑:程序博客网 时间:2024/05/21 11:02
初学者,有错误请指正,谢谢!
C语言头指针单链表实现:
#include<stdio.h>#include<stdlib.h>#include<malloc.h>typedef int ElemType;typedef struct LNode{ ElemType data; struct LNode *next;}LNode,*LinkList;//创建一个空表LinkList CreateList(LinkList L){ LinkList p=NULL; if(L==NULL){ p=(LinkList)malloc(sizeof(LNode)); if(p==NULL){ free(p); exit(0); } L=p; L->next=NULL; } else exit(0); return L;}//创建一个长度为size的链表(链尾插入)LinkList CreateList_T(LinkList L,int size){ LinkList p,q; int i; L=CreateList(L); p=L; for(i=0;i<size;i++){ q=(LinkList)malloc(sizeof(LNode)); if(!q){ free(q); exit(0); } else{ //printf("data:"); //scanf("%d",&q->data); q->data=rand()%100; q->next=NULL; p->next=q; p=q; if(i==0) L->next=p; //printf("%d\n",p->data); } } return L;}//创建一个长度为size的链表(链头插入)LinkList CreateList_H(LinkList L,int size){ LinkList p; int i; L=CreateList(L); for(i=size;i>0;i--){ p=(LinkList)malloc(sizeof(LNode)); if(!p) exit(0); else{ //printf("data:"); //scanf("%d",&p->data); p->data=rand()%100; p->next=L->next; L->next=p; } } return L;}//链表长度int ListLength(LinkList L){ LinkList p=L->next; int i=0; while(p){ p=p->next; i++; } return i;}//插入元素void InsertNode(LinkList L,int pos,ElemType e){//元素插在第pos个位置 LNode *p=L,*q; int i=0; while(p->next!=NULL&&i<pos-1){//寻找第pos-1个结点 p=p->next; i++; } if(!p||i>pos-1)//pos小于1或大于表长+1 exit(0); q=(LinkList)malloc(sizeof(LNode)); if(!q) exit(0); else{ q->data=e; q->next=p->next; p->next=q; }}//删除元素ElemType DeleteNode(LinkList L,int pos){ LNode *p=L,*q; ElemType e; int i=0; while((p->next!=NULL)&&(i<pos-1)){//寻找第pos-1个结点 p=p->next; i++; } if(!(p->next)||i>pos-1) exit(0); else{ q=p->next; p->next=q->next; e=q->data; free(q); } return e;}//检查头指针及其next域是否为空void CheckLinkList(LinkList L){ if(!L) exit(0); if(!(L->next)) exit(0);}//遍历链表void TraverseList(LinkList L){ LinkList p; CheckLinkList(L); for(p=L->next;p!=NULL;p=p->next){ printf("Element is %d\n",p->data); }}//查询元素在链表第一次出现的位置int SearchNode(LinkList L,ElemType e){ int i=0; LNode *p=L->next; while(p){ i++; if(p->data==e) return i; p=p->next; } return 0;}//倒置链表LinkList ReverseList(LinkList L){ LNode *p,*q,*s; p=L; q=p->next; while(q->next){ s=q->next; q->next=p; p=q; q=s; } q->next=p; L->next->next=NULL; L->next=q; return L;}//删除链表void DeleteList(LinkList L){ LNode *p,*q; CheckLinkList(L); p=L->next; while(p){ q=p; p=p->next; free(q); } free(p);}int main(){ int n,length,pos; LinkList L=NULL; scanf("%d",&n);//链表长度 //L=CreateList_T(L,n); L=CreateList_H(L,n); TraverseList(L); length=ListLength(L); printf("The length of the linklist is %d\n\n",length); InsertNode(L,1,0); TraverseList(L); pos=SearchNode(L,41); printf("The position of 41 is %d\n",pos); length=ListLength(L); printf("The length of the linklist is %d\n\n",length); DeleteNode(L,1); TraverseList(L); length=ListLength(L); printf("The length of the linklist is %d\n\n",length); L=ReverseList(L); TraverseList(L); DeleteList(L); return 0;}
0 0
- C语言 头指针单链表
- c语言链表 头指针
- C语言 头指针链表
- 【c/c++】单链表、头指针、头结点、首元节点
- c语言指针单链表
- C语言字符串反转实现【采用头指针和尾指针方法完成】
- c语言有头循环单链表
- C语言实现无头节点单链表
- c语言头文件
- C语言头文件
- C语言头文件
- C语言头文件组织
- C语言头文件组织
- C语言头文件
- C语言头文件
- C语言头文件
- C语言头文件
- C语言头文件组织
- ZooKeeper数据模型
- OpenLayers学习笔记2——坐标转换问题
- Some Simple C Programs学习笔记
- python笔记6.2
- ajaxfileupload.js插件结合一般处理文件实现Ajax无刷新上传
- C语言 头指针单链表
- Android中的信使Messenger的源码解析
- HDU ACM 2049 不容易系列之(4)——考新郎->组合加错排
- 使用WakeLock使Android应用程序保持后台唤醒
- uboot-2011-06 之makefile分析(三)结合代码的编译
- 数据库 优化临时表使用,SQL语句性能提升100倍
- android 屏幕保持唤醒 不锁屏 android.permission.WAKE_LOCK
- [Android]浅析Http框架 - Android-Async-http
- CAS—认证原理