线性表

原创 2016年08月30日 21:44:58
#include"stdio.h"     //非顺序结构  链表
#include"stdlib.h"
#include"time.h"
struct node
{
    int val;
    node *next;
};

int Length(node *head) //长度
{
    int cnt;
    node*p=head->next;
    for(cnt=0;p;p=p->next)
        cnt++;
    return cnt;
}

node *init() //初始化
{
    node*head=(node*)malloc(sizeof(node));
    head->val=-1;
    head->next=NULL;
    return head;
}



void Delete(node *head,int *e,int pos)  //删除
{
    int i=-1; //设置头结点 为-1这个位置
    node *p=head;
    while(i<=pos-1&&p) //找到要删除的位置的前驱
    {
        i++;
        if(i>pos-1) break; //找到位置了
        if(p->next)
            p=p->next;
        else
            break;
    }
    if(i==pos)  //找到这个元素了
    {
        node *q=p->next;
        *e=q->val;
        p->next=q->next;
    }
    else
    {
        printf("It's so boring to delete this elem!\n");
    }
}
void Insert(node *head,int e,int pos)  //插入
{
    int i=-1;node *p=head;
    while(i<=pos-1&&p)//找到元素pos的前驱
    {
        i++;        //标志表示能否插入  如果无法到达pos+1,无法插入
        if(i>pos-1) break; //找到目标位置了

        if(p->next) //当 没有找到 并且 后继不为空 的时候继续 向后移动
            p=p->next;
        else break;  //当 后继为空 的时候会直接退出

    }
    if(i==pos)
    {
        node *q=(node*)malloc(sizeof(node));
        q->next=p->next;
        q->val=e;
        p->next=q;
    }
    else{
        printf("Why so Diao!\n");
    }

}
void ListTraverse(node *head)  //遍历
{
    int first=1;
    for(node*p=head->next;p;p=p->next)
    {
        if(first) first=0;
        else printf(" ");
        printf("%d",p->val);
    }
    printf("\n");
}
int main()
{
    node * head=init();
    Insert(head,1,0);
    Insert(head,2,0);
    Insert(head,3,0);
    Insert(head,40,0);
    Insert(head,5,0);
    ListTraverse(head);
    Insert(head,3,10);
    printf("List length:%d\n",Length(head));

    int *e=(int*)malloc(sizeof(int));
    Delete(head,e,0);
    ListTraverse(head);
    printf("%d\n",*e);
    printf("List length:%d\n",Length(head));

    printf("%.2f\n",(double)clock()/CLOCKS_PER_SEC);

}

.


#include"stdio.h"      //顺序结构 数组
#include"stdlib.h"
struct list{
    int *next;
    int len;
    int cap;
};
void init(list *s,int n)  //初始化一个容量为n的表
{
    s->next=(int*)malloc(n*sizeof(int));
    s->len=0;
    s->cap=n;
}
void append(list *s,int a)  //向末尾追加一个数字
{
    s->next;
    if(s->len<s->cap)
    s->next[s->len++]=a;
}
void insert(list *s,int a,int pos)  //向pos位置插入a
{
    if(pos>=0&&pos<=s->len) // 在[0...len]范围内可以操作
    if(s->len+1<s->cap) //小于容量才操作
    {
        for(int i=++s->len-1;i>pos;i--)
            s->next[i]=s->next[i-1];
        s->next[pos]=a;
    }
}
void Delete(list *s,int pos,int *e)
{
    if(pos>=0&&pos<s->len)  //删除的位置不能出界
    {
        *e=s->next[pos];
        for(int i=pos;i<--s->len;i++)
            s->next[i]=s->next[i]+1;
    }
}
void destroy(list *s)
{
    free((void*)s->next);
    s->next=NULL;
}
int compare(int e,int a)
{
    return a==e;
}
int location(list s,int e)
{
    for(int i=0;i<s.len;i++)
        if(compare(e,s.next[i]))
        return i;

    return -1;
}

int priorElem(list s,int e) //返回e的前驱的下标
{
    int pos=-1;
    for(int i=0;i<s.len;i++)
        if(compare(e,s.next[i]))
    {pos=i;break;}
    return pos==0?-1:pos-1;
}

void ListTraverse(list s)
{
    for(int i=0;i<s.len;i++)
        printf("%d ",s.next[i]);
    printf("\n");
}
int main()
{
    list *p=(list*)malloc(sizeof(list));
    init(p,5);
    //向末尾追加元素
    append(p,1);
    //打印表格 长度 容量 与第0个元素
    printf("%d %d %d\n",p->len,p->cap,p->next[0]);
    //向1这个位置插入2
    insert(p,2,1);
    printf("%d %d %d %d\n",p->len,p->cap,p->next[0],p->next[1]);

    printf("%d\n",location(*p,2));

    printf("%d\n",priorElem(*p,2));

    ListTraverse(*p);
    int a;
    Delete(p,0,&a);
    printf("%d %d\n",p->next[0],a);


    destroy(p);
    free((void*)p);
    p=NULL;
    return 0;
}


#include"stdio.h"  //循环链表
#include"iostream"
#include"stdlib.h"
struct Node
{
    Node *next;
    int val;
};

Node* Init()
{
    Node *head=(Node*)malloc(sizeof(Node));
    head->next=head;
    return head;
}

void Append(Node *head,int e)
{
    Node *p=head;
    while(p->next!=head)
    {
        p=p->next;
    }
    Node *q=(Node*)malloc(sizeof(Node));
    p->next=q;
    q->next=head;
    q->val=e;
}

void Insert(Node *head,int e,int pos)
{
    int i=-1;
    Node* p=head;
    while(i<=pos-1)  //while(i<=pos-1&&p->next!=head)
    {
        i++;
        if(i==pos) break;      //找到了
        if(p->next!=head)
            p=p->next;
        else break; //若下一个为head则停止
    }
    if(i==pos)
    {
        Node *q=(Node *)malloc(sizeof(Node));
        q->next=p->next;
        q->val=e;
        p->next=q;
    }
    else
        puts("It's so boring!");
}

void Delete(Node* head,int *e,int pos)
{
    Node*p=head;
    int i=-1;
    while(i<=pos-1)
    {
        i++;
        if(i==pos)break;
        if(p->next!=head) p=p->next;
        else break;
    }
    if(i==pos)
    {
        Node *q;
        q=p->next;
        *e=q->val;
        p->next=q->next;
        free(q);
        q->next=NULL;
    }
    else
    {
        *e=-1;
        puts("Why so boring!");
    }
}


void Print(Node *head)
{
    Node *p=head->next;
    while(p!=head)
    {
        printf("%d ",p->val);
        p=p->next;
    }

    printf("\n");
}

int main()
{
    Node *head=Init();
    Append(head,1);
    Append(head,2);
    Print(head);

    //Insert(head,3,1);
    //Insert(head,3,0);
    Insert(head,2,2);
    Insert(head,334,5);
    Print(head);
    int *e=(int*)malloc(sizeof(int));
    //Delete(head,e,2);
    //Delete(head,e,0);
    Delete(head,e,234);
    Print(head);
    printf("%d\n",*e);
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

线性表插入和删除——程序实例

顺序实现 .h文件 此文件为方法 #ifndef SQLIST_H_INCLUDED #define SQLIST_H_INCLUDED #include "ds.h" ...
  • Cowena
  • Cowena
  • 2015年08月07日 08:58
  • 2819

线性表的建立以及基本操作

#include #include #define MaxSize 50 typedef char ElemType; typedef struct { ElemType elem[Ma...
  • ciganxian
  • ciganxian
  • 2014年05月29日 17:17
  • 3397

线性表--数组和链表的区别

数组是将元素在内存中连续存放,从栈中分配空间,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的...
  • Limitless1113
  • Limitless1113
  • 2015年07月07日 07:41
  • 1501

数据结构线性表快速排序

  • 2018年01月09日 01:52
  • 13KB
  • 下载

线性表c代码实现

  • 2017年10月22日 15:53
  • 780KB
  • 下载

基础线性表

  • 2017年10月11日 11:01
  • 4.24MB
  • 下载

华中科技大学_基于链式存储结构实现线性表的基本运算

  • 2016年07月23日 14:06
  • 93KB
  • 下载

数据结构线性表

  • 2015年05月05日 22:29
  • 407KB
  • 下载

线性表的链式存储结构

  • 2017年03月28日 21:15
  • 73KB
  • 下载

数据结构与算法 第2章线性表 哈工大课程

  • 2015年01月15日 10:53
  • 1.51MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:线性表
举报原因:
原因补充:

(最多只允许输入30个字)