标签:date ptr str 节点 nbsp cpp 语句 指定 一个
typedf用法:https://blog.csdn.net/qq_29350001/article/details/53883571
#include<stdio.h>
#include<stdlib.h>
typedef int ElementType;
typedef struct LNode * PtrToLNode;
struct LNode{
ElementType Data;
PtrToLNode Next;
};
typedef PtrToLNode Position;
typedef PtrToLNode List;
List MakeEmpty()//初始化
{
List L;
L = (List)malloc(sizeof (struct LNode));
if (!L)
exit (-1);
L->Next = NULL;
return L;
}
int FindKth(List L,int K)//根据指定的位序查找
{
Position p;
int cnt = 1;//位序从1开始
p = L->Next;
while(p&&cnt<K)
{
p = p-> Next;
cnt++;
}
if((cnt==K)&&p)
printf("您查找的数为:%d\n",p -> Data);
else printf("您查找数不存在");
}
Position Find(List L,int X)//按值查找
{
Position p;
p = L->Next;
while(p&&p->Data!=X)
{
p = p-> Next;
}
if(p)
printf("查找成功,您查找的数为:%d\n",p->Data);
else
printf("您查找数不存在");
}
List Insert(List L ,ElementType X,int i)//插入
{
Position tmp,pre;
int cnt =0 ;
pre = L;
while(pre&&cnt<i-1)
{
pre = pre->Next;
cnt++;
}
if(pre==NULL||cnt!=i-1)
{
printf("插入位置参数错误\n");
}
else
{
tmp = (Position)malloc(sizeof(struct LNode));
tmp->Data=X;
tmp->Next=pre->Next;
pre->Next=tmp;
}
}
bool Delete(List L,int i){ //删除
Position tmp,pre;
int cnt = 0;
pre = L;
while(pre&&cnt<i-1)
{
pre=pre->Next;
cnt++;
}
if(pre==NULL||cnt!=i-1||pre->Next==NULL){
printf("删除位置参数错误");
}
else
{
tmp = p re->Next;
pre->Next = tmp->Next;
free(tmp);
printf("删除成功");
}
}
int Length(List L){ //求表长
Position p;
int cnt = 0;
p = L->Next;//p指向表的第一个结点
while(p)
{
p = p -> Next;
cnt++;//当前指向第cnt个节点
}
return cnt;
}
void DisLinkList(List L){ //输出
List p = L->Next;
printf("输出链表: ");
while (p)
{
printf("%d ", p->Data);
p = p->Ne xt;
}
}
int main()
{
Position pre;
Position L = MakeEmpty();
pre = L;
int i,n,x,len,cz,del;
printf("您要输入几位数:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&x);
Insert(pre,x,i);//插入
}
DisLinkList(pre); //输出
printf("\n");
len = Length(L);//求表长
printf("表长为:%d",len);
printf("\n");
int l;
printf("输入插入的数");
scanf("%d",&l);
Insert(pre,l,n+1);
DisLinkList(pre);
printf("请输入你要按值查找的数:\n");
scanf("%d",&cz);//按值查找
Find(L,cz);
printf("\n");
printf("请输入你要按序号查找的数的序号:\n");
scanf("%d",&cz);
FindKth(L,cz); //按序号查找
printf("\n");
printf("请输入你要删除的数的下标:\n",del);
scanf("%d",&del);
Delete(L,del); //删除
DisLinkList(pre);//输出
printf("\n");
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 10
typedef int Position;
typedef int ElementType;
typedef struct LNode * PtrToLNode;
struct LNode//将数组Date和变量Last封装成一个结构体作为顺序表的类型;
{
ElementType Data[MAXSIZE];
Position Last;
};
typedef PtrToLNode List;
List MakeEmpty()//建表
{ List L;
L = (List)malloc(sizeof (struct LNode));//动态分配表结构所需要的存储空间;
L->Last = -1; //Last指针置为1,表示表中没有数据
return L;
}
#define ERROR -1
Position Find(List L,ElementType X)//查找
{
Position i = 0;
while(i<=L->Last&&L->Data[i]!=X)//从第一个元素起依次与x比较直到相等后输出下标
{ i++;
}
if(i>L->Last) //若到最后还没有找到,输出语句
printf("您查找的数不存在\n");
else printf("您查找数的存储下标为:%d",i);
}
Insert(List L ,ElementType X,int i)//插入
{ Position j;
if(L -> Last == MAXSIZE-1)//表空间已满,不能插入
{
printf("表满");
return false;
}
if(i<1||i>L->Last+2)//检查插入位序的合法性:是否在1~n+1
{
printf("位序不合法");
return false;
}
for(j=L->Last;j>=i-1;j--)//插入
{
L->Data[j+1] = L-> Data[j];
}
L->Data[i-1] = X;
L->Last++;
return true;
}
Delete(List L,int i) //删除
{
Position j;
if(i<1||i>L->Last+1)//表中没有元素
{
printf("位序%d不存在元素\n",i);
}
else
{
for(j=i;j<=L->Last;j++)
{ L->Data[j] = L->Data[j+1];
}
L->Last--;
printf("删除成功\n");
}
}
int Length(List L)//求表长
{
return L->Last+1;
}
int main()
{
List L = MakeEmpty();
int i,n,x,len,cz,del;
double res; //插入
printf("您要输入几位数:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&x);
Insert(L,x,i);
} //输出
printf("输出线性表:\n");
for(i=0;i<n;i++)
{
printf("%d ",L->Data[i]);
}
printf("\n"); //求表长
len = Length(L);
printf("表长为:%d",len);
printf("\n"); //查找
printf("请输入你要查找的数:\n");
scanf("%d",&cz);
Find(L,cz);
printf("\n"); //删除
printf("请输入你要删除的数的下标:\n",del);
scanf("%d",&del);
Delete(L,del);
printf("输出线性表:\n");
for(i=0;i<=L->Last;i++)
{
printf("%d ",L->Data[i]);
}
printf("\n");
return 0;
}
来源:陈越《数据结构》第二版
标签:date ptr str 节点 nbsp cpp 语句 指定 一个
原文地址:https://www.cnblogs.com/mouzaisi/p/12177824.html