如何建造一个空的顺序表,然后再向里面插入数据,C语言 5
展开全部
#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;
}
以上代码偏多,主要是多个层次和多个角度,全方位书写顺序表,真正项目一般使用一种插入和删除方法.
展开全部
#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;
}
#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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以在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)
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
https://github.com/77Sera/Data-Structure
里面有个sequence list的源码。。点进去看吧
里面有个sequence list的源码。。点进去看吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询