数据结构中线性表的有关操作

#include<stdio.h>
#include<stdlib.h>
//此链表中的数据均为int型
typedef struct Link_list{
  int date;
  struct Link_list *next;
}Link;

int main()
{
  Link *Link_creat();
  void Link_print(Link *head);
  void ClearList(Link *head);
  bool ListEmpty(Link *head);
  int ListLength(Link *head);
  int GetElem(Link *head,int n);
  bool ListDelete(Link *head,int locate);
  bool ListInsert(Link *head,int number,int locate);
  Link *Line;
  Line=Link_creat();
  //if(ListDelete(Line,2))Link_print(Line);
  //printf("%d ",GetElem(Line,6));
  return 0;
}

Link *Link_creat()
{
  Link *head=NULL;
  Link *tail=head;
  int number;
  do{
    scanf("%d",&number);
    if(number==-1){
     break;
  }
  Link *p=(Link *)malloc(sizeof(Link));
  p->date=number;
  p->next=NULL;
  if(!tail){
    head=p;
    tail=head;
  }
  else {
      while(tail->next)
      {
        tail=tail->next;
      }
    tail->next=p;
    }
  }while(number!=-1);
  return head;
}

void Link_print(Link *head)
{
  Link *p=head;
  while(p)
  {
    printf("%d ",p->date);
    p=p->next;
  }
}

void ClearList(Link *head)
{
  Link *p=head;
  Link *pt=head->next;
  while(pt)
  {
    free(p);
    p=pt;
    pt=pt->next;
  }
  free(p);
}

bool ListEmpty(Link *head)
{
  Link *p=head;
  if(!p)return false;
  else return true;
}

int ListLength(Link *head)
{
  Link *p=head;
  int ans=0;
  while(p)
  {
    ans++;
    p=p->next;
  }
  return ans;
}
int GetElem(Link *head,int n)
{
  Link *p=head;
  if(n>ListLength(p))return -1;
  for(int i=1;i<n;i++)
  {
    p=p->next;
  }
  return p->date;
}

bool ListInsert(Link *head,int number,int locate)
{
  if(locate>ListLength(head))return false;
  Link *p=head;
  Link *temp=(Link *)malloc(sizeof(Link));
  temp->date=number;
  for(int i=1;i<locate-1;i++)
  {
    p=p->next;
  }
  temp->next=p->next;
  p->next=temp;
  return true;
}

bool ListDelete(Link *head,int locate)
{
  if(locate>ListLength(head))return false;
  Link *p=head;
  for(int i=1;i<locate-1;i++)
  {
    p=p->next;
  }
  p->next=(p->next)->next;
  return true;
}

时间: 2024-12-20 07:02:28

数据结构中线性表的有关操作的相关文章

数据结构中线性表的基本操作-合并两个线性表-依照元素升序排列

#include<iostream> #include<stdlib.h> #define LIST_INIT_SIZE 10/*线性表初始长度*/ #define LIST_CREATENT 2/*每次的增量*/ typedef int ElemType; using namespace std; typedef struct SqList/*线性表的数据结构定义*/ { ElemType *elem;/*线性表基址*/ int length;/*当前线性表所含的元素个数*/ i

数据结构中线性表的基本操作-合并两个线性表

#include<iostream> #include<stdlib.h> #define LIST_INIT_SIZE 10/*线性表初始长度*/ #define LIST_CREATENT 2/*每次的增量*/ typedef int ElemType; using namespace std; typedef struct SqList/*线性表的数据结构定义*/ { ElemType *elem;/*线性表基址*/ int length;/*当前线性表所含的元素个数*/ i

数据结构中线性表的顺序式表示的基本操作函数

线性表的基本操作共有十二个.我们通过对线性表基本操作的有机组合,可以处理较为复杂的线性表. 一.初始化顺序线性表——构造一个空的顺序线性表 1 void InitList(SqList &L) 2 { 3 L.elem = (ElemType*)malloc(LIST_INIT_SIZE *sizeof(ELemType));//malloc函数来分配存储空间 4 if(!L.elem)//分配存储失败 5 { 6 exit(OVERFLOW); 7 } 8 L.length = 0;//空表的

数据结构中线性表的顺序式表示动态分配存储结构

顺序线性表存储结构,很容易实现随机存取线性表第i个元素的操作,但实现删除或者插入操作时需要移动大量的数据元素.所以,顺序表适应于稳定的线性表,如职工工资表和学生学籍表. 1 #define LIST_INIT_SIZE 10 //线性表存储空间的的初始分配量 2 #define LIST_INCREMENT 2//线性表存储空间分配增量 3 4 typedef int ElemType;//定义抽象数据类型ElemType为整形变量 5 6 struct Sqlist 7 { 8 ElemTyp

算法数据结构 顺序表的实现+操作 及对产生问题的分析

线性表的顺序存储是将线性表中的元素存放在一组连续的存储单元中.使得在线性表中逻辑上相邻的元素在物理存储单元上也是连续的.采用顺序存储的线性表叫做顺序表. 线性表的顺序存储结构如下: 模块化设计: 头文件 结构体和相应函数的定义,声明 #ifndef _SEQLIST_H #define _SEQLIST_H #include<iostream> #include<assert.h>//断言 #include<string.h> #include<stdlib.h&

数据结构-线性表的一些基础操作 c++代码

//线性表的顺序存储结构 template <class T> class Linearlist { public: Linearlist(int MaxListSize == 10); ~Linearlist() { delete []element; } bool IsEmpty() const { return length == 0; } bool IsFull() const { return length == MaxSize; } int Length() const { ret

【数据结构】用C++实现顺序表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等)

//顺序表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等) //头文件 #pragma once #include <iostream> using namespace std; template<class Type> class SeqList { public: SeqList(size_t sz = INIT_SIZE); ~SeqList(); public: bool isfull() const {return size >= capacity; } b

基础数据结构-线性表-顺序表的合并操作

因为最近笔记本B面裂了准备去修,复杂些的会优先加上注释,所以在家先把代码和题目贴上来以后补文字,有疑问可以在下面留言. 顺序表的合并操作 题目描述建立顺序表的类,属性包括:数组.实际长度.最大长度(设定为1000) 已知两个递增序列,把两个序列的数据合并到顺序表中,并使得顺序表的数据递增有序输入第1行先输入n表示有n个数据,接着输入n个数据,表示第1个序列,要求数据递增互不等 第2行先输入m表示有m个数据,接着输入m个数据,表示第2个序列,要求数据递增互不等输出顺序表内容包括顺序表的实际长度和数

【数据结构】用C语言实现顺序表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等)

//顺序表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等) //头文件 #ifndef _SEQLIST_H #define _SEQLIST_H #include<stdio.h> typedef int ElemType; #define INIT_SIZE 8 typedef struct SeqList { ElemType *base; size_t capacity; size_t size; }SeqList; int isempty(SeqList *list); in