单链表各项操作(绝对无错)_第1页
单链表各项操作(绝对无错)_第2页
单链表各项操作(绝对无错)_第3页
单链表各项操作(绝对无错)_第4页
单链表各项操作(绝对无错)_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验一 线性表的存储结构及各种运算的实现#include "stdio.h"#include "stdlib.h"#define listsize 100typedef struct    int datalistsize;    int length;Seqlist;void main()    void createlist(Seqlist *l,int n);    void printlist(Seqlist *l,int n)

2、;    void locateElem(Seqlist *l,int n);    void listinsert(Seqlist *l,int i,int n);    void listdelete(Seqlist *l,int i,int n);    int n;    int i=0;    Seqlist l;    l.length=0;   

3、;    printf("请输入线性表长度:");    scanf("%d",&n);    createlist(&l,n);    printlist(&l,n);    locateElem(&l,n);    listinsert(&l,i,n);    listdelete(&l,i,n)

4、;    printf("n");/新建顺序表void createlist(Seqlist *l,int n)    int i;    printf("请输入顺序表元素:n");    for(i=0;i<n;i+)            scanf("%d",&l->datai);  

5、;      l->length=n;    /输出顺序表void printlist(Seqlist *l,int n)    int i;    printf("顺序表为:");    for(i=0;i<n;i+)            printf("%d ",l->datai);&

6、#160;   /查找元素void locateElem(Seqlist *l,int n)    int i=1,*p;    p=l->data;    printf("n请输入要查找的元素n:");    scanf("%d",&n);    while(i<=l->length&&(*p+!=n) +i;   

7、; if(i<=l->length)    printf("要查找的数的位置为:%d",i);/插入元素void listinsert(Seqlist *l,int i,int n)    int *q,*p;    printf("n请输入要插入的数:");    scanf("%d",&n);    if(l->length=0)  &#

8、160;         l->data0=n;        +l->length;               q=&(l->data0);    while(*q<=n)&&(q<=&(l->datal->length-1)  &

9、#160;         +q;        +l->length;    for(p=&(l->datal->length-1);p>=q;-p)        *(p+1)=*p;     *p=n;      printf("输出新表:n"

10、;);          for(i=0;i<l->length;i+)             printf("%d ",l->datai);     /删除元素void listdelete(Seqlist *l,int i,int n)    int *p,*q;  

11、0; printf("n请输入要删除的数的位置:");    scanf("%d",&i);          if(i<1|i>l->length)    printf("删除元素失败!");       p=&l->datai-1;    n=*p;

12、60;   q=l->data+l->length-1;    for(+p;p<=q;+p)             *(p-1)=*p;         -l->length;              for(i=0;i<l

13、->length+1;i+)            printf("%d ",l->datai);    2,单链表#include <stdio.h>#include <stdlib.h>typedef struct linklist int nDate; struct linklist *next;Linklist;/链表输出void output(Linklist *head) Linklist *p = head

14、->next; while(NULL != p) printf("%d ", p->nDate); p = p->next; printf("rn");/链表建立Linklist* creat() Linklist *head = NULL, *p = NULL, *s = NULL; int Date = 0, cycle = 1; head = (Linklist*)malloc(sizeof(Linklist); if(NULL = head) printf("分配内存失败咯n"); return NULL;

15、head->next = NULL; p = head; printf("请输入数据且当输入数据为0时结束输入n"); while(cycle) scanf("%d", &Date); if(0 != Date) s = (Linklist*)malloc(sizeof(Linklist); if(NULL = s) printf("分配内存失败n"); return NULL; s->nDate = Date; p->next = s; p = s; else cycle = 0; p->next =

16、 NULL; return(head);/测试链表长度void length(Linklist *head) Linklist *p = head->next; int j=0; while(NULL != p) p = p->next; j+; printf("%drn", j);/查找void research_Date(Linklist *head, int date) Linklist *p; int n=1; p = head->next; while(NULL != p && date != p->nDate) p = p

17、->next; +n; if(NULL = p) printf("没找到你要的值(>_<)"); else if(date = p->nDate) printf("要查找的值%d在链表中第%d个位置n", date, n); return;/按序号查找void research_Number(Linklist *head, int Num) Linklist *p=head; int i = 0; while(NULL != p && i < Num) p = p->next; i+; if(p = N

18、ULL) printf("查找位置不对n"); else if(i = 0) printf("查找位置为头结点n"); else if(i = Num) printf("第%d个位置数据为%drn", i, p->nDate); /在指定元素之前插入新结点void insert_1(Linklist *head, int i, int Newdate) Linklist *pre = head, *New = NULL; int j = 0; while(NULL != pre && j < i-1) pr

19、e = pre->next; j+; if(NULL = pre | j > i-1) printf("插入位置不存在n"); else New = (Linklist*)malloc(sizeof(Linklist); if(NULL = New) printf("分配内存失败咯n"); return; New->nDate = Newdate; New->next = pre->next; pre->next = New; /在指定元素之后插入新结点void insert_2(Linklist *head, int

20、 i, int Newdate) Linklist *pre = head, *New = NULL; int j = 0; while(NULL != pre->next && j < i) pre = pre->next; j+; if(j = i) New = (Linklist*)malloc(sizeof(Linklist); if(NULL = New) printf("分配内存失败n"); return; New->nDate = Newdate; New->next = pre->next; pre->

21、;next = New; else printf("插入位置不存在n"); /删除指定结点void Delete_1(Linklist *head, int i3) Linklist *p = head, *pre = NULL; int j = 0; while(NULL != p && j < i3) pre = p; p = p->next; j+; if(NULL = p) printf("删除位置不存在n"); else pre->next = p->next; free(p); /指定删除单链表中某个数

22、据,并统计删除此数据的个数int Delete_2(Linklist *head, int Delete_date) int count = 0; Linklist *p = head, *q; while(NULL != p->next) q = p->next; if(q->nDate = Delete_date) p->next = q->next; free(q); +count; else p = q; return count;/链表逆置void Reverse_list(Linklist *head) Linklist *q, *s; if(NULL

23、 = head->next | NULL = head->next->next) return; q = head->next->next; head->next->next = NULL; while(NULL != q) s = q->next; q->next = head->next; head->next = q; q = s; /单链表的连接void connect_list(Linklist *head, Linklist *head_New) Linklist *p = head; while(NULL != p

24、->next) p = p->next; p->next = head_New->next;void destroy_list(Linklist* head) while (NULL != head) Linklist* temp = head; head = head->next; free(temp); void main()int m; int date, num; int i3; /指定删除元素的位置 int i1, i2, Newdate_1, Newdate_2; /待插入的新数据 int Delete_date, k; Linklist *Head

25、= NULL; /定义头结点 Linklist *Head_New = NULL; printf("*单链表的各项操作*n"); printf("1.单链表的建立t"); printf("2.测试单链表的长度tn"); printf("3.按值查询t"); printf("4.按序查询tn"); printf("5.前插t"); printf(" 6.后插tn"); printf("7.按序删除t"); printf("8.按

26、值删除tn"); printf("9.单链表的逆置t"); printf("10.单链表的链接tn"); printf("*n");loop:printf("请输入1到10之间的数字,以回车结束,未建立单链表时请先选择1:"); scanf("%d",&m); switch(m) case 1:printf("您选择的是链表的建立:");goto loop1;break; case 2:printf("您选择的是测试单链表的长度:");g

27、oto loop2;break; case 3:printf("您选择的是按值查询:");goto loop3;break; case 4:printf("您选择的是按序查询:");goto loop4;break; case 5:printf("您选择的是前插:");goto loop5;break; case 6:printf("您选择的是后插:");goto loop6;break; case 7:printf("您选择的是按序删除:");goto loop7;break; case 8:

28、printf("您选择的是按值删除:");goto loop8;break; case 9:printf("您选择的是单链表的逆置:");goto loop9;break; case 10:printf("您选择的是单链表的链接:");goto loop10;break; /链表建立loop1: Head = creat(); printf("输出建立的单链表n"); output(Head); goto loop; /单链表测长loop2: printf("单链表长度为n"); length(

29、Head); goto loop; /链表按值查找loop3: printf("请输入待查找的数据n"); scanf("%d", &date); research_Date(Head, date);goto loop; /链表按序号查找loop4: printf("请输入待查找序号n"); scanf("%d", &num); research_Number(Head, num); goto loop;loop5: printf("在指定第i个元素之前插入新元素Newdate"); printf("请输入i与元素且以逗号间隔n"); scanf("%d,%d", &i1, &Newdate_1); insert_1(Head, i1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论