首页 > 代码库 > some code of c
some code of c
//// main.c// LineList//// Created by Rubert on 16/9/11.// Copyright © 2016年 Study. All rights reserved.//#include <stdio.h>//定义链表数据结构struct node{ int num; struct node *next; struct node *prior;};//函数声明struct node *create();void print();void linkedList();void headInsertLinkedList();void tailInsertLinkedList();void findLinkedList();void insertLinkedList();void deleteLinkedList();void circleInsertLinkedList();void doubleInsertLinkedList();int main(int argc, const char * argv[]) { // insert code here... //headInsertLinkedList(); //tailInsertLinkedList(); //findLinkedList(); //insertLinkedList(); //deleteLinkedList(); //circleInsertLinkedList(); doubleInsertLinkedList(); return 0;}/* * 头插入法创建链表 */void headInsertLinkedList() { struct node *head = NULL; struct node *p1; for(int i = 1; i < 10; i ++) { p1 = (struct node*)malloc(sizeof(struct node)); p1 -> num = i; p1 -> next = head; head = p1; } print(head);}/* * 尾插入法创建链表 */void tailInsertLinkedList() { struct node *head = NULL; struct node *p1,*p2; p1 = p2 = (struct node*)malloc(sizeof(struct node)); for(int i = 1; i < 10; i ++) { if(head == NULL) { head = p1; } else { p2 -> next = p1; } p2 = p1; p1 = (struct node*)malloc(sizeof(struct node)); p1->num = i; } print(head);}/** * 创建循环链表 */void circleInsertLinkedList() { struct node *head = NULL; struct node *p1,*p2; p1 = p2 = (struct node*)malloc(sizeof(struct node)); for(int i = 1; i < 10; i ++) { if(head == NULL) { head = p1; } else { if(i == 9) { p1->next = head; } p2 -> next = p1; } p2 = p1; p1 = (struct node*)malloc(sizeof(struct node)); p1->num = i; } print(head);}/** * 创建双向链表 */void doubleInsertLinkedList() { struct node *head = NULL; struct node *p1,*p2; p1 = p2 = (struct node*)malloc(sizeof(struct node)); for(int i = 1; i < 10; i ++) { if(head == NULL) { head = p1; } else { /*if(i == 9) { p1->next = head; }*/ p2 -> next = p1; p1 -> prior = p2; } p2 = p1; p1 = (struct node*)malloc(sizeof(struct node)); p1->num = i; } print(head);}/* * 链表查找 */void findLinkedList() { struct node *head = NULL; struct node *p1; for(int i = 1; i < 10; i ++) { p1 = (struct node*)malloc(sizeof(struct node)); p1 -> num = i; p1 -> next = head; head = p1; } struct node *p; p = head -> next; int j = 1; int i = 5; while(p !=NULL && j < i) { p = p->next; ++j; } printf("%6d %d %d\n",p->num, p, p->next);/*输出链表节点的值*/}/* * 链表中插入 */void insertLinkedList() { struct node *head = NULL; struct node *p1; for(int i = 1; i < 10; i ++) { p1 = (struct node*)malloc(sizeof(struct node)); p1 -> num = i; p1 -> next = head; head = p1; } struct node *p,*m; p = head; int j = 0; int i = 5; while(p !=NULL && j < i-1) { p = p->next; ++j; } if(p == NULL) { printf("error"); } else { m = (struct node*)malloc(sizeof(struct node)); m->num = j; m->next = p -> next; p->next = m; } print(head); }/* * 链表中删除 */void deleteLinkedList() { struct node *head = NULL; struct node *p1; for(int i = 1; i < 10; i ++) { p1 = (struct node*)malloc(sizeof(struct node)); p1 -> num = i; p1 -> next = head; head = p1; } struct node *p,*m; p = head; int j = 0; int i = 5; while(p !=NULL && j < i-2) { p = p->next; ++j; } if(p == NULL) { printf("error"); } else { //m = (struct node*)malloc(sizeof(struct node)); //m->num = j; //m->next = p -> next; p->next = p->next->next; } print(head); }/* * sample 1 */void linkedList(){ struct node *head; head = NULL;//创建一个空表 head = create(head); /* 创建单链表 */ print(head);/* 打印单链表 */ }struct node *create(struct node *head) //返回的是与节点相同类型的指针{ struct node *p1,*p2; int i = 1; //利用malloc() 函数向系统申请分配一个节点 p1 = p2 = (struct node*)malloc(sizeof(struct node));//新节点 printf("请输入值,值小于等于0结束,值存放地址为:p1_ADDR= %d\n",p1); scanf("%d",&p1->num);/*输入节点的值*/ p1->next=NULL;/*将新节点的指针置为空*/ while(p1->num > 0)/*输入节点的数值大于0*/ { //④将新节点的指针成员赋值为空。若是空表,将新节点连接到表头;若是非空表,将新节点接到表尾; if(head == NULL) head = p1;/*空表,接入表头*/ else p2->next = p1;/*非空表,接到表尾*/ p2 = p1; p1 = (struct node*)malloc(sizeof(struct node));/*下一个新节点*/ i = i+1; printf("请输入值,值小于等于0结束,值存放地址为:p%d_ADDR= %d\n",i,p2); scanf("%d",&p1->num);/*输入节点的值*/ //⑤判断一下是否有后续节点要接入链表,若有转到3 ),否则结束; } //==============原来程序更正部分:(多谢@daling_datou提醒)================================ //free(p1); //申请到的没录入,所以释放掉 p1 = NULL; //使指向空 p2->next = NULL; //到表尾了,指向空 printf("链表输入结束(END)\n"); //============================================== return head;}void print(struct node *head)/*出以head为头的链表各节点的值*/{ struct node *temp; temp = head;/*取得链表的头指针*/ printf("\n\n\n链表存入的值为:\n"); while(temp != NULL)/*只要是非空表*/ { printf("%6d %d %d %d\n",temp->num, temp, temp->next, temp->prior);/*输出链表节点的值*/ temp = temp->next;/*跟踪链表增长*/ } printf("链表打印结束!!");}
some code of c
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。