刚学数据结构,希望有一个简单的线性表代码参考,能输入数就行了

如题所述

线性表有顺序存储和链式存储,数据结构的代码都比较多,不是几行就可以了,下面是链表(线性表的链式存储结构)的基本操作,你看看

#include "stdio.h"
#include "stdlib.h"
#include"string.h"
#define OK  1
#define ERROR 0
typedef char ElemType[10];//数据元素类型
typedef struct LNode{     //单链表结构
  ElemType data;
  struct LNode *next;
}LNode,*LinkList;
void CreateList_L(LinkList &L,int n)
{//顺序创建有n个结点的单链表
 LinkList p,q; int i;
 L=(LinkList)malloc(sizeof(LNode));//生成头节点
 if(!L) return ;
 L->next=NULL;q=L;
 for(i=1;i<=n;++i)
  {
  p=(LinkList)malloc(sizeof(LNode));//生成新节点
  printf("Input NO.%d  :",i);
  scanf("%s",p->data);
  p->next=NULL;q->next=p;
  q=p;
  }
}
void Display_L(LinkList L)
{//L为头指针,显示单链表的每个元素
 LinkList p=L->next;
 while(p)
  {
  printf("%s\t",p->data); p=p->next;
  }
 printf("\n");
}
int GetElem_L(LinkList L,int i,ElemType e)
{//L为单链表的头指针,取为位序为i的元素值,并赋值给变量e
 LinkList p=L->next; int j=1;
 while(p&&j<i)
  {
  p=p->next; j++;
  }
 if(!p||j>i) return ERROR;
 strcpy(e,p->data);return OK;
}
int ListInsert_L(LinkList &L,int i,ElemType e)  
{//L为单链表的头指针,表示在位序为i的元素前插入数据e
 LinkList p=L,s;int j=0;
 while(p&&j<i-1) //定位在第i-1节点上
  {
  p=p->next; ++j;
  }
 if(!p||j>i-1) return ERROR;//i值不合理
 s=(LinkList)malloc(sizeof(LNode));
 strcpy(s->data,e);
 s->next=p->next;
 p->next=s;
 return OK;
}
int ListDelete_L(LinkList &L,int i,ElemType e)
{//L为单链表的头指针,删除位序为i的数据元素,并将其值赋值给e
 LinkList p=L,q; int j=0;
 while(p&&j<i-1)
  {
  p=p->next; ++j;
  }
 if(!p||j>i-1) return ERROR;//i值不合理
 q=p->next;p->next =q->next ;//删除结点 
 strcpy(e,q->data );free(q);//释放结点
 return OK;
}
void main()
{
 LinkList L;
 ElemType e;
 int n;
 printf("请输入单链表的长度n=");
 scanf("%d",&n);
 CreateList_L(L,n);
 printf("\n原始单链表是:");Display_L(L);
 if(GetElem_L(L,3,e))printf("\n3号结点的内容是:%s\n",e);
 if(ListDelete_L(L,6,e))
 printf("\n删除6号结点后的单链表是:");Display_L(L);
 if(ListInsert_L(L,4,"李"))
 printf("\n在4号结点前插入后的单链表是:\n");Display_L(L);
}

温馨提示:答案为网友推荐,仅供参考