如何建造一个空的顺序表,然后再向里面插入数据,C语言 5

 我来答
检怜南0F8
2017-09-09 · TA获得超过305个赞
知道小有建树答主
回答量:290
采纳率:0%
帮助的人:156万
展开全部

#include <stdio.h>
#include <stdlib.h>
/*
 1.创建结构体-----具体事物的抽象
 2.创建链表
 3.创建结点
 4.插入操作
  4.1 表头插入
  4.2 表尾插入
  4.3 指定位置插入(指定位置的前面)
 5.删除操作
  5.1 表头删除
  5.2 表尾删除
  5.3 指定位置删除
 6.判断是否为空
 7.打印链表
*/
//单链表的结构体
typedef struct SingleList
{
 //数据域
 int data; //以这个数据为例
 //struct MM  myMM;
 //指针域
 struct SingleList *next;
}LIST,*LPLIST;
/*
 别名:习惯大写
 起别名---小名
 //好处:单词少,好看(含义更精简)
 struct SingleList  换一种叫法:  LIST;
 strcut SingleList *  换一种叫法: LPLIST
*/
//------->2.创建链表  ---任何结构都需要用一个东西去表示
LPLIST CreateList()
{
 //创建过程就是初始化过程---初始化基本数据成员过程
 //需要内存空间
 LPLIST List = (LPLIST)malloc(sizeof(LIST));
 if (List == nullptr)
 {
  printf("失败了\n");
  system("pause");
  exit(0);
 }
 //初始化基本数据成员----有表头的链表
 List->next = nullptr;
 return List;
}
//------->3.创建结点  
LPLIST CreateNode(int data)
{
 //1.需要内存
 LPLIST Node = (LPLIST)malloc(sizeof(LIST));
 //2.初始化基本数据成员
 Node->data = data;  //和创建链表多了数据域
 Node->next = nullptr;
 return Node;
}
//------->4.1 头插法
//函数写法:形参可以表示要操作的东西
//插入的链表是(List),插入的数据是多少(data)
void InsertListHeadNode(LPLIST List,int data)
{
 //插入:创建插入的结点
 LPLIST newNode = CreateNode(data);  //创建结点
 //插入操作
 newNode->next = List->next;
 /*
  c=1
  b=2
  a=c;
  c=b;
 */
 List->next = newNode;
}
//------->4.2 尾插法
void InsertListTailNode(LPLIST List, int data)
{
 //找到表尾--->定义一个移动的指针
 LPLIST tailNode = List;
 while (tailNode->next != nullptr)
 {
  tailNode = tailNode->next;
 }
 //创建插入的结点
 LPLIST newNode = CreateNode(data);
 tailNode->next = newNode;
}
//------->4.3 指定位置
void InsertListAppoinNode(LPLIST List, int data, int PosData)
{
 //创建两个移动的指针:去找指定位置和指定位置的前面
 LPLIST frontNode = List;
 //frontNode->next==taiNode:判断相邻
 LPLIST tailNode = List->next;
 //判断是否为空
 while (tailNode->data != PosData)
 {
  /*
  frontNode=frontNode->next;
  tailNode=tailNode->next;
  */
  frontNode = tailNode;
  tailNode = frontNode->next;
  if (tailNode == nullptr)
  {
   printf("未找到指定位置\n");
   system("pause");
   exit(0);
  }
 }
 //tailNode->data=data;
 //找到后创建插入的结点
 LPLIST newNode = CreateNode(data);
 frontNode->next = newNode;
 newNode->next = tailNode;
}

//------->5.判断是否为空
  //和创建的时候比较
int  IsEmptyList(LPLIST List)
{
 if (List->next == nullptr)
  return 1;  //返回1表示为空
 return 0;   //表示不为空
}
////------->6.打印数据
void PrintList(LPLIST List)
{
 if (IsEmptyList(List))
 {
  printf("链表为空,无法打印");
  system("pause");
  exit(0);
 }
 LPLIST pNext = List->next;
 while (pNext != nullptr)
 {
  printf("%d\t", pNext->data);
  pNext = pNext->next;
 }
 printf("\n");
}
//------->7.删除
  //头删除
void DeleteListHeadNode(LPLIST List)
{
 if (IsEmptyList(List))
 {
  printf("链表为空,无法删除\n");
  system("pause");
  exit(0); 
 }
 LPLIST DNode = List->next;
 List->next = DNode->next;
 free(DNode);
 DNode = nullptr;
}
//------->8.尾删
void DeleteListTailNode(LPLIST List)
{
 if (IsEmptyList(List))
 {
  printf("链表为空,无法删除\n");
  system("pause");
  exit(0);
 }
 //找到表尾--->定义一个移动的指针
 LPLIST tailNode = List->next;
 LPLIST tailFront = List;
 while (tailNode->next != nullptr)
 {
  tailFront = tailNode;
  tailNode = tailFront->next;
 }
 tailFront->next = nullptr;
 free(tailNode);
}
//------->9.指定位置删除
void DeleteListAppoinNode(LPLIST List, int PosData)
{
 //创建两个移动的指针:去找指定位置和指定位置的前面
 LPLIST frontNode = List;
 //frontNode->next==taiNode:判断相邻
 LPLIST tailNode = List->next;
 //判断是否为空
 while (tailNode->data != PosData)
 {
  /*
  frontNode=frontNode->next;
  tailNode=tailNode->next;
  */
  frontNode = tailNode;
  tailNode = frontNode->next;
  if (tailNode == nullptr)
  {
   printf("未找到指定位置\n");
   system("pause");
   exit(0);
  }
 }
 frontNode->next = tailNode->next;
 free(tailNode);
}

int main()
{
 LPLIST List = CreateList();  //List创建成功
 printf("插入:\n");
 InsertListHeadNode(List, 1);
 InsertListHeadNode(List, 2);
 InsertListHeadNode(List, 3);
 InsertListTailNode(List, 0);
 PrintList(List);
 printf("删除:\n");
 DeleteListHeadNode(List);
 PrintList(List);
 DeleteListTailNode(List);
 PrintList(List);
 printf("指定位置:\n");
 //看不懂,可以找群主
 InsertListAppoinNode(List, 4, 2);
 InsertListAppoinNode(List, 3, 2);
 //C/C++ 8群
 PrintList(List);
 // 491994603
 DeleteListAppoinNode(List, 2);
 PrintList(List);
 system("pause");
 return 0;
}

以上代码偏多,主要是多个层次和多个角度,全方位书写顺序表,真正项目一般使用一种插入和删除方法.

有钱买不起房子
2011-06-14 · TA获得超过4324个赞
知道大有可为答主
回答量:1249
采纳率:100%
帮助的人:2066万
展开全部
#include <stdio.h>

#define ListSize 100 //表空间的大小
typedef int DataType;//数据类型

//定义顺序表结构体
typedef struct
{
DataType data[ListSize];//数据域
int length; //当前的表长度
}SeqListNode,*SeqList;

//顺序表的初始化
void InitSeqList(SeqList L)//顺序表的初始化即将表的长度置为0
{
L->length=0;
}
//按位置插入数据,i-指定插入位置(i前面插入),x-插入值
int Insert_SL(SeqList L,int i,DataType x)
{
int j;

//表空间溢出
if (L->length >= ListSize)
{
printf("表空间溢出\n");
return 0;
}

//检验插入元素是否合法
if(i<1 || i>ListSize)
{
printf("插入位置:%d不合法!\n",i);
return 0;
}
else
{
//数组元素后移,为插入元素空出位置
for(j=L->length-1;j>=i-1;j--)
{
L->data[j+1]=L->data[j];

}
//插入数据元素
L->data[i-1]=x;
//表长加1
L->length++;

}
return 1;

}
//打印顺序表
int SeqListPrint(SeqList L)
{
int i;
if(L->length==0)
{
printf("顺序表为空\n");
return 0;
}

printf("顺序表:\n");
for(i=0;i<L->length;i++)
printf("%d ",L->data[i]);
printf("\n");
return 1;
}

int main()
{
int i;
DataType x;
int num;
SeqListNode L,*lp=&L;

//表的初始化
InitSeqList(lp);

printf("请输入元素个数:");
scanf("%d",&num);
//录入数据
for(i=1;i<=num;i++)
{
printf("输入第%d个元素:",i);
scanf("%d",&x);
if(Insert_SL(lp,i,x)!=1)
return 0;
}

//打印顺序表
SeqListPrint(lp);
return 1;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我3Q1
2017-08-03 · TA获得超过312个赞
知道小有建树答主
回答量:433
采纳率:65%
帮助的人:149万
展开全部
typedef struct{    
ElemType *elem;   //定义了顺序表中元素类型的数组指针,指向顺序表存储空间的基址    
int length;       //顺序表的长度(也即元素个数)    
int listsize;     //当前分配给顺序表的存储容量
}SqList;    
 
2.顺序表的初始化
接下来对该顺序表进行初始化,为顺序表分配一个预定义大小的数组空间,并将当前顺序表长度设为0,如果元素个数大于分配的存储容量则再对容量进行扩充(初始化时不扩充,顺序表使用中按需要进行容量扩充)。代码如下:
Status InitList(SqList *L){    
(*L).elem=(ElemType*)malloc(100*sizeof(ElemType));    //不知什么问题不能用LIST_INIT_SIZE,必须用100,下面的realloc函数也是一样?    
if((*L).elem==NULL){        
exit(OVERFLOW);
 }    
(*L).length=0;    
(*L).listsize=LIST_INIT_SIZE;    
return ok;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
seohyun328
2018-04-17 · TA获得超过1.2万个赞
知道小有建树答主
回答量:89
采纳率:100%
帮助的人:1.2万
展开全部

可以在pandas中创建一个空DataFrame的方法,类似于创建了一个空字典,之后向里面插入数据

例如:

empty =pandas.DataFrame({"name":"","age":"","sex":""})

想要向empty中插入一行数据。

(1)创建一个DataFrame。

new= pandas.DataFrame({"name":"","age":"","sex":""},index=["0"])。

(2)开始插值    ignore_index=True,可以帮助忽略index,自动递增。

empty.append(new,ignore_index=True)

(3)最重要的,赋值给empty.

empty= empty.append(new,ignore_index=True)

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
1042423041
2017-08-22 · TA获得超过285个赞
知道小有建树答主
回答量:220
采纳率:0%
帮助的人:95.5万
展开全部
https://github.com/77Sera/Data-Structure
里面有个sequence list的源码。。点进去看吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式