第十天
2015-11-05 14:39
274 查看
顺序表:
顺序表的结构:
typedef struct sqlist{
int data[size];
int length;
}
链表:单向链表 双向链表
单向链表:
typedef struct linkList{
int data;
struct linkList *next;
}linkList;
双向链表:
typedef struct DlinkList{
int data;
struct DlinkList* next;
struct Dlinklist *prev;
}DlinkList;
Dlinklist *create_dlinklist(int data){
创建dlinllist指针。
用malloc分配空间
初始化
返回
}
双向循环链表:
练习:
1.用单向链表实现数据1》2》3》4》5倒序5》4》3》2》1
//不产生更多空间的情况下,把数据倒序。主要方法是把一个数据删除然后再把数据插入进去,删除第二个数据再把数据放进去,就会变成2》1》3》4》5,如此类推,最后会变成
5》4》3》2》1,记得删除数据后因为还需要使用所以不能free掉,运用到的是头插法。
head->1->2->3->4->5 linkliest*p=head->next ;linklist*p=head->next;现在p和q都指向1,head->next=null;把head断开,然后p->next!=null; q=p-next;把q指向2 ;现在要把1和head连起来,所以p->next=head->next;不能写直接等于null,因为为了接下来的也能用,保证通用性,head->next=p;再把p=q 就是把q移到2的地方,当p->next==null的时候还需要把最后一个删除然后放到第一个,所以循环外还需要把p->next=head->next;head->next=p;
下面的方法不值得做,因为多了一个链表
.c文件
2.用双向循环链表保存20个随机数,并且把随机数的奇数和偶数分别输出。(从头遍历一次,再从尾到头遍历一次)
用%运算符来求奇数偶数。
.c文件
.h文件
顺序表的结构:
typedef struct sqlist{
int data[size];
int length;
}
链表:单向链表 双向链表
单向链表:
typedef struct linkList{
int data;
struct linkList *next;
}linkList;
双向链表:
typedef struct DlinkList{
int data;
struct DlinkList* next;
struct Dlinklist *prev;
}DlinkList;
Dlinklist *create_dlinklist(int data){
创建dlinllist指针。
用malloc分配空间
初始化
返回
}
双向循环链表:
练习:
1.用单向链表实现数据1》2》3》4》5倒序5》4》3》2》1
//不产生更多空间的情况下,把数据倒序。主要方法是把一个数据删除然后再把数据插入进去,删除第二个数据再把数据放进去,就会变成2》1》3》4》5,如此类推,最后会变成
5》4》3》2》1,记得删除数据后因为还需要使用所以不能free掉,运用到的是头插法。
head->1->2->3->4->5 linkliest*p=head->next ;linklist*p=head->next;现在p和q都指向1,head->next=null;把head断开,然后p->next!=null; q=p-next;把q指向2 ;现在要把1和head连起来,所以p->next=head->next;不能写直接等于null,因为为了接下来的也能用,保证通用性,head->next=p;再把p=q 就是把q移到2的地方,当p->next==null的时候还需要把最后一个删除然后放到第一个,所以循环外还需要把p->next=head->next;head->next=p;
linklist *p=head->next; linklist *p=head->next; head->next=NULL; while(p->next!=NULL){ q=p->next; p->next=head->next;//空 ,null head->next=p; } //最后一个数 p->next=head->next; head->next=p;
下面的方法不值得做,因为多了一个链表
.c文件
// // linklist.c // // // Created by FD on 15/11/5. // // #include "linklist.h" linklist *create_linklist(int data){ linklist *new=(linklist *)malloc(sizeof(linklist)); new->data=data; new->next=NULL; return new; } void display_linklist(linklist *head){ if (head==NULL) { printf("error,null\n"); } head=head->next; while (head!=NULL) { printf("%d\n",head->data); head=head->next; } } bool insert_linklist(linklist *head,int data){ if (head==NULL) { printf("null"); return false; } // linklist *new=head; // new->next=head->next; // head->next=new; // new->data=data; // return true; while (head->next!=NULL) { head=head->next; } linklist *new=create_linklist(data); if (new==NULL) { return false; } head->next=new; return true; } //bool insert_linklisthead(linklist * head){ // if (head==NULL) { // printf("error\n"); // return false; // } // linklist *new=create_linklist(); // //} bool insert_linklisthead(linklist *head,int data){ if (head==NULL) { printf("error,null"); return false; } linklist *new=create_linklist(data); // if (head->next==NULL) { // head->next=new; // return true; // } new->next=head->next; head->next=new; return true; } //void reverse_linklist(linklist *head){ // // //printf("2"); // // //linklist *new=head; // if (head==NULL) { // printf("error"); // } // linklist *new=head; // new=new->next; // linklist *new1; // // while (new!=NULL) { // // printf("1"); // bool c=insert_linklisthead(new,new->data); // new=new->next; // } // // // printf("%d",new->data); // // //} int main(){ linklist *return_element=create_linklist(0); for (int i=1;i<=5 ;i++) { bool b=insert_linklist(return_element,i); } display_linklist(return_element); linklist *new=create_linklist(0); return_element=return_element->next; while (return_element!=NULL) { bool c=insert_linklisthead(new,return_element->data); return_element=return_element->next; } printf("---------------------------\n"); // new=new->next; display_linklist(new); // while (new!=NULL) { // printf("%d",new->data); // new=new->next; // } // printf("%d",return_element->data); // printf("%d",return_element->next->data); // display_linklist(new); //printf("2"); // reverse_linklist(return_element); }.h文件
// // linklist.h // // // Created by FD on 15/11/5. // // #ifndef linklist_h #define linklist_h #include <stdio.h> #include <stdlib.h> #include <stdbool.h> typedef struct linklist{ int data; struct linklist *next; }linklist; linklist *create_linklist(int data); bool insert_linklist(linklist *head,int data); void display_linklist(linklist *head); void reverse_linklist(linklist *head); bool insert_linklisthead(linklist *head,int data); #endif /* linklist_h */
2.用双向循环链表保存20个随机数,并且把随机数的奇数和偶数分别输出。(从头遍历一次,再从尾到头遍历一次)
用%运算符来求奇数偶数。
.c文件
// // DlinkList.c // // // Created by FD on 15/11/5. // // #include <stdio.h> #include<time.h> #include <sys/time.h> #include "DlinkList.h" DlinkList *created_dlinklist(int data){ DlinkList *new=(DlinkList*)malloc(sizeof(DlinkList)); new->data=data; new->prev=NULL; new->next=NULL; return new; } //尾插法 bool insert_dlinklist(DlinkList *head,int data){ if (head==NULL) { printf("null\n"); return false; } while (head->next!=NULL) { head=head->next; } DlinkList *new=created_dlinklist(data); head->next=new; new->prev=head; return true; } //头插法 bool insert_dlinklisthead(DlinkList *head,int data){ if (head==NULL) { printf("null\n"); return false; } DlinkList *new=created_dlinklist(data); if (head->next==NULL) { head->next=new; new->prev=head; return true; } new->next=head->next; new->prev=head; head->next->prev=new; head->next=new; return true; } //显示 void display_dlinklist(DlinkList *head){ if (head==NULL) { printf("null\n"); } head=head->next; printf("even:\n"); while (head!=NULL) { if ((head->data)%2==0) { printf("%d\n",head->data); } head=head->next; } } void show(DlinkList *head){ if (head==NULL) { printf("null"); } head=head->next; printf("odd:\n"); while (head!=NULL) { if ((head->data)%2!=0) { printf("%d\n",head->data); } head=head->next; } } //删除 bool delete_Dlinklist(DlinkList *head,int data){ if (head==NULL) { printf("null\n"); } while (head->next!=NULL) { if (head->next->data==data) { break; } head=head->next; } if (head->next==NULL) { return false; } // p不是最后一个节点 DlinkList *needf=head->next; head->next=needf->next; needf->next->prev=head; free(needf); return true; } int main(){ DlinkList *new=created_dlinklist(0); for (int i=0; i<20; i++) { struct timeval tval; gettimeofday(&tval,NULL); srandom(tval.tv_usec); int randomnumber=random()%100; bool insert=insert_dlinklist(new,randomnumber); } display_dlinklist(new); show(new); return 0; } /* main.c a.c 多文件编译:gcc main a.c main.c */ //int main(){ // DlinkList *new=created_dlinklist(0); // for (int i=0; i<10; i++) { // bool insert=insert_dlinklist(new,i); // } // display_dlinklist(new); // return 0; // 4000 // // // //}
.h文件
// // DlinkList.h // // // Created by FD on 15/11/5. // // #ifndef DlinkList_h #define DlinkList_h #include <stdio.h> #include <stdlib.h> #include <stdbool.h> typedef struct DlinkList{ int data; struct DlinkList* prev; struct DlinkList* next; }DlinkList; DlinkList *created_dlinklist(int data); bool insert_dlinklist(DlinkList *head,int data); bool insert_dlinklisthead(DlinkList *head,int data); void display_dlinklist(DlinkList *head); bool delete_Dlinklist(DlinkList *head,int data); #endif /* DlinkList_h */
相关文章推荐
- POJ 3273 Monthly Expense
- Java 基础语法
- error C2011: “某某类”:“class”类型重定义
- Java系列:Add Microsoft SQL JDBC driver to Maven
- 如何隐藏 QLPreviewController 的 Action 按钮?
- BFGS校正
- java.lang.OutOfMemoryError: GC overhead limit exceeded
- 在Ubuntu 12.04安装和设置SSH服务
- 机器学习复习——聚类
- Android 系统状态栏一体化
- nginx+php-fpm总是504 time out
- javax.servlet.http.httpservlet was not found
- 关于__attribute__
- 生成四位随机数的PHP代码
- Objective C----手动管理内存和自动管理内存
- Android 屏幕适配详解
- Mac安装Composer
- JavaScript高级程序设计之DOM 扩展之HTML5之字符集属性第11.3.4讲
- 故障:evice eth0 seems not present delaying initialization
- OpenGL超级宝典学习笔记——GLSL语言基础