您的位置:首页 > 其它

第十天

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;

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 */
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: