单链表的C语言实现
来源:互联网 发布:熊片数据库 安卓 编辑:程序博客网 时间:2024/05/17 15:56
今天学习了单链表,并写出了其的C语言实现,验证了一下感觉基本正确。但是代码的健壮性不够,对于有的不合法的输入,并没有显示输出错误。
代码可以直接贴在编译器上编译执行,我已经写过主函数了。
如有错误,欢迎指正。
#include <stdio.h>#include <malloc.h> typedef struct LNode{ int data; LNode *next;}LNode, *LinkList;LinkList create() /////建立链表{ LNode *head; head = (LinkList)malloc(sizeof(LNode)); ////为什么要用linklist而不能用LNode 这是malloc函数的规定 int i; printf("how many numbers do you want to scanf:"); scanf("%d", &i); LinkList p; p = head; while (i) { int a; scanf("%d", &a); LinkList temp; temp = (LNode*)malloc(sizeof(LNode)); temp->data = a; p->next = temp ; p = temp; i--; } p->next = NULL; return head; } int ListInsert(LinkList p, int i, int &e) ////链表指定位置插入元素{ LinkList p1, p2, temp; p1 = p; while (i - 1) { p1 = p1 ->next; i--; } p2 = p1 -> next; temp = (LinkList)malloc(sizeof(LNode)) ; temp -> data = e; p1 ->next = temp; temp -> next = p2; return 0; } int ListDelete(LinkList p, int i, int &e) ////链表指定位置删除函数,并用e返回删除值。{ LinkList p1, p2; p1 = p; while (i - 1) { p1 = p1 ->next; i--; } p2 = p1 -> next; e = p2 -> data; p1 -> next = p2 -> next; free(p2); return 0; } int Length(LinkList p) ////链表长度{ LinkList q; q = p; int i = 0; while(q->next) { q = q->next; i++; } return i; } int ListSort(LinkList p) //链表内元素排序{ int i; LNode *q1, *q2; i = Length(p); int j; for (j = 0; j < i; j++) { q1 = p; q1 = q1 -> next; q2 = q1 -> next; int k; for (k = 0; k < i - j - 1; k++) { if (q1 -> data > q2 -> data) { int temp; temp = q1 -> data; q1 -> data = q2 -> data; q2 -> data = temp; } q1 = q1 -> next; q2 = q2 -> next; } } return 0; } int ListSee(LinkList p) //链表的遍历{ int i; i = Length(p); p = p -> next; while(i --) { printf("%d ", p -> data); p = p -> next; } printf("\n"); return 0; } LinkList reserve(LinkList p){ LinkList q1, q2, q3,rehead; q1 = p -> next; q2 = q1 -> next; q3 = q2 -> next; q1 -> next = NULL; while(q3) { q2 -> next = q1; q1 = q2; q2 = q3; q3 = q3 -> next; } q2 -> next = q1; p = (LinkList)malloc(sizeof (LNode)) ; p -> next = q2; return p; } int main() //主函数验证了下实现效果如何。{ LNode *head; int i, j; i = 2; head = create(); ListSee(head); /* head = reserve(head); ListSee(head); */ ListSort (head); ListSee(head); ListDelete(head,i, j); printf("%d\n", j); ListSee(head); ListInsert(head,i, j); ListSee(head); system ("pause"); return 0; }
- 单链表的C语言实现
- 单链表的C语言实现
- c语言单链表的实现
- 单链表C语言的实现
- 单链表的C语言实现
- C语言单链表的实现
- 【C语言】单链表的实现
- [c语言]单链表的实现
- 单链表的C语言实现
- C语言 单链表的实现
- 单链表的C语言实现
- 单链表的C语言实现
- C语言一个单链表的实现
- C语言实现单链表的各种操作
- C语言又一个单链表的实现
- c语言又一个单链表的实现
- 单链表的C语言算法实现
- C语言实现单链表的逆置
- 给mac终端iTerm2配色
- 比较字符串
- hnu 12436 Force of thrust#水题
- 修改用户名和用户组名
- 对线性回归,logistic回归和一般回归的认识
- 单链表的C语言实现
- 判别模型、生成模型与朴素贝叶斯方法
- C# 的DllImport
- Tomcat6与NIO配置与修改
- Xilinx Zynq 操作系统的选择
- 28.整数的二进制表示中1 的个数
- “燕子”
- hnu 12439 #贪心
- framebuffer扫盲