c语言中删除顺序表的函数 c语言排序后删除相同的数
使用C语言编写程序,实现顺序表的基本运算——插入和删除。
typedef struct
成都创新互联主要从事网站制作、成都网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务同心,十多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575
{
int *elem;
int length;
int listsize;
} Sqlist;
status Create_sq(Sqlist *L,int n)
{
int i;
L-elem=(int*)malloc(100*sizeof(int));
if(!L-elem) return 0;
for(i=0;in;i++)
scanf("%d",(L-elem[i]));
L-length=n;
L-listsize=100;
return 1;
}
status Listinsert_sq(Sqlist *L,int i,int e)
{
int *q,*p,*newbase;
if(i1||iL-length+1) return 0;
if(L-length=L-listsize)
{
newbase=(int*)realloc(L-elem,(L-listsize+10)*sizeof(int));
if(!newbase) exit(-2);
L-elem=newbase;
L-listsize+=10;
}
q=(L-elem[i-1]);
for(p=(L-elem[L-length-1]);p=q;--p)
*(p+1)=*p;
*q=e;
++L-length;
return 1;
}
int main()
{
Sqlist L1;
int n,a;
int i,e;
printf("\n please input the number of data:\n");
scanf("%d",n);
if(Create_sq(L1,n)==1)
{
scanf("%d%d",i,e);
a=Listinsert_sq(L1,i,e);
if(a==1)
printf("insert success\n");
else printf("insert false\n");
printf("the list elements are:\n");
for(i=1;i=L1.length;i++)
{
printf("%d\t",L1.elem[i-1]);
}
}
return 0;
}
顺序表的插入删除及应用(C语言版的)
我这有两种方法,一种是按位置插入,另一种是按值。
(1)、
void insert1(elem *p,int i,int x)//在第i个位置插入x值
{int j;//j 是记录a[M]的一个下标
if((i=0||ip-len)||(p-len=M))
printf("You Don't insert X in The Locate %d !!!!!!!!\n\n",i);//判断i的值是否合法
else //合法后在i插入x
{for (j=p-len;ji-1;j--)
p-a[j]=p-a[j-1]; //使第i个位置后面的数依次后移
p-a[i-1]=x;//在第i个位置插入x
p-len++;//长度加1
}
}
(2)、
void insert2(elem *p,int x,int y)//在值x的位置插入y值
{int k=locate(p,x);//调用locate()函数(查找x的位置)
if(k==-1)//返回值为-1时,说明没有x值
printf("The list haven't number X ;%d !\n",x);
else//否则调用insert1(),在位置k插入y值
insert1(p, k, y);
}
int locate(elem *p,int x)//这是查找定位x的值
{int i;
for(i=0;ip-len;i++)
if(p-a[i]==x)
break;
if(i==p-len)
return(-1);//没有x值
else
return(i+1);//x值位于第i+1位置
}
下面的是删除,也有两种方法。一是按位置,一是按值。
(1)、
void dele1(elem *p,int i)//删除第i个数
{int j;
if(i1||ip-len||p-len==0||iM)//判断是否合法
printf("The list Don't have The locate %d!!!!!!!!!\n\n",i);
else//合法则删除
{for(j=i;j=p-len;j++)
p-a[j-1]=p-a[j];
p-len--;
}
}
(2)、
void dele2(elem *p,int x)
{int k=locate(p,x);
if(k==-1)
printf("Don't delete the number X:%d !!!!!!!!!\n\n",x);
else
dele1(p,k);
}
下面的是删除重复的数。
void deleof(elem *p)
{int i,j;
for(j=0;jp-len;j++)
{for(i=p-len-1;ij;i--)
if(p-a[j]==p-a[i])
dele1(p,i+1);
}
}
不足之外在所难免请诸位指正.
删除顺序表中的第i个元素,,给个完整的 C语言代码吧~~~ 谢谢
#include stdio.h
#define MAXSIZE 100
typedef struct{
int elem[MAXSIZE];
int last;
} SeqList;
void deletelist(SeqList *l,int i,int k);
int main(){
int i,k,j=0;
SeqList *l;
SeqList a;
l=a;
scanf("%d%d",i,k);//输入i和k
while(scanf("%d",l-elem[j])!=EOF)
j++;//输入顺序表内容
l-last=j-1;
deletelist(l,i,k);
return 0;
}
扩展资料
顺序表插入元素
向已有顺序表中插入数据元素,根据插入位置的不同,可分为以下 3 种情况:
1、插入到顺序表的表头;
2、在表的中间位置插入元素;
3、尾随顺序表中已有元素,作为顺序表中的最后一个元素;将要插入位置元素以及后续的元素整体向后移动一个位置;将元素放到腾出来的位置上。
注意,动态数组额外申请更多物理空间使用的是 realloc 函数。并且,在实现后续元素整体后移的过程,目标位置其实是有数据的,还是 3,只是下一步新插入元素时会把旧元素直接覆盖。
C语言线性顺序表的插入和删除
#include"stdio.h"
#include"malloc.h"
#include"iostream.h"
typedef int status;
typedef int elementype;
#define INITSIZE 100
#define INCREMENT 2
struct sqlist
{
elementype *elem;
int length;
int listsize;
};
//建立链表,并排列数据
status listinit(sqlist l)
{
int i=0,x,j,t;
l.elem=(elementype *)malloc(INITSIZE*sizeof(elementype));
if(!l.elem)
{
cout"建表失败"endl;
return 0;
}
l.length=0;
l.listsize=INITSIZE;
while(1)
{
cout"请输入数据(输入0时结束):";
cinx;
if(x==0) break;
l.elem[i]=x;
++l.length;
i++;
}
for(i=0;il.length-1;i++)
for(j=0;jl.length-i-1;j++)
if(l.elem[j]l.elem[j+1])
{
t=l.elem[j+1];
l.elem[j+1]=l.elem[j];
l.elem[j]=t;
}
cout"排序成功"endl;
return 1;
}
//插入数据
status listinsert(sqlist l,int i,elementype e)
{
elementype *p,*q,*newbase;
if(i1||il.length)
{
cout"i输入错误"endl;
return 0;
}
if(l.length=l.listsize)
{
newbase=(elementype*)realloc(l.elem,(l.listsize+INCREMENT)*sizeof(elementype));
if(!newbase)
{
cout"申请空间失败"endl;
return 0;
}
l.elem=newbase;
l.listsize=l.listsize+INCREMENT;
}
q=(l.elem[i-1]);
for(p=(l.elem[l.length-1]);p=q;--p)
{
*(p+1)=*p;
}
*q=e;
++l.length;
cout"插入成功";
return 1;
}
//删除数据
status listdelete(sqlist l,int i,elementype e)
{
elementype *p,*q;
if(i1||il.length)
{
cout"i输入错误"endl;
return 0;
}
p=(l.elem[i-1]);
e=*p;
q=l.elem+l.length-1;
for(++p;p=q;++p)
{
*(p-1)=*p;
}
--l.length;
cout"删除成功"endl;
free(e);
return 1;
}
//删除重复的数据
status listdeleterepeat(sqlist l)
{
int i,j;
elementype *p,*q,e;
for(i=0;il.length-1;i++)
for(j=i+1;jl.length-1;j++)
if(l.elem[i]==l.elem[j])
{
p=(l.elem[j]);
e=*p;
q=l.elem+l.length-1;
for(++p;p=q;++p)
{
*(p-1)=*p;
}
--l.length;
free(e);
j--;
}
return 1;
}
//输出顺序表数据
status displaylist(sqlist l)
{
int i;
cout"顺序表的数据为:"endl;
for(i=0;il.length;i++)
{
coutl.elem[i]" ";
}
coutendl;
return 1;
}
//查找数据
status locatelem(sqlist l,int x)
{
elementype *p;
int i=1;
p=l.elem;
while(il.length(*p++)!=x)
i++;
coutiendl;
return 1;
}
//清空列表
void listclear(sqlist l)
{
l.length=0;
}
//销毁顺序表
void listdestroy(sqlist l)
{
if(l.elem)
free(l.elem);
}
//求顺序表长度
status listlength(sqlist l)
{
cout"顺序表的长度为:"l.lengthendl;
return 1;
}
int main()
{
sqlist l;
int a,i,x;
elementype e;
cout"*************************************************"endl;
cout"* 顺序表的表示和实现 *"endl;
cout"*************************************************"endl;
do{
cout"*************************************************"endl;
cout"* 菜单 *"endl;
cout"* 1.建立顺序表 *"endl;
cout"* 2.插入数据 *"endl;
cout"* 3.删除数据 *"endl;
cout"* 4.删除重复数据 *"endl;
cout"* 5.清空数据 *"endl;
cout"* 6.查找数据 *"endl;
cout"* 7.顺序表的长度 *"endl;
cout"* 8.显示顺序表 *"endl;
cout"* 0.退出顺序表 *"endl;
cout"*************************************************"endl;
cout"输入你的选择:";
cina;
switch(a)
{
case 1: listinit(l);
displaylist(l);
break;
case 2: cout"请输入要插入数据的位置:";
cini;
cout"请输入要插入的数据元素:";
cine;
listinsert(l,i,e);
displaylist(l);
break;
case 3: cout"请输入要删除的数据的位置:";
cini;
listdelete(l,i,e);
displaylist(l);
break;
case 4: cout"删除前的数据为:";
displaylist(l);
listdeleterepeat(l);
cout"删除后的数据为:";
displaylist(l);
break;
case 5: cout"清空前为:";
displaylist(l);
cout"清空后为:";
listclear(l);
displaylist(l);
break;
case 6: cout"输入你要查找的数据:";
cinx;
cout"你要查找的数据的位置为:";
locatelem(l,x);
displaylist(l);
break;
case 7: cout"顺序表的长度为:";
listlength(l);
break;
case 8: displaylist(l);
break;
default: break;
}
}while(a!=0);
return 1;
}
C语言中顺序列表的插入删除程序
#include stdio.h
#include stdlib.h
#include string.h
#define MaxSize 50
#define len(x) sizeof(x)/sizeof(x[0])
typedef struct SqList
{
int data[MaxSize];
int length;
}SqList;
static SqList Create(int a[],int n);//用一个数组创建静态顺序表
static void Print(SqList L);//打印一个静态顺序表
static void ListInsert(SqList *p,int i,int e);//L的第i个位置插入e
static void ListDelete(SqList *p,int i);//删除列表第i个数据
static int LocateElem(SqList L,int e);//查找第一个值等于e的元素,返回其位序
static void Reverse(SqList *p,int left,int right);//逆置表的第left到right的元素顺序
/*递增序列折半查找等于e的元素,返回其位序*/
static int Binsearch(SqList L,int e);
int main()
{
int a[]={1,2,3,4};
SqList L=Create(a,len(a));
ListInsert(L,2,100);
ListDelete(L,2);
Reverse(L,1,4);
Print(L);
printf("%d\n",Binsearch(L,2));
}
static SqList Create(int a[],int n)
{
SqList L;
int i;
L.length=n;
for(i=0;iL.length;i++)
L.data[i]=a[i];
return L;
}
static void Print(SqList L)
{
int i;
for(i=0;iL.length;i++)
printf("%d ",L.data[i]);
printf("\n");
}
static void ListInsert(SqList *p,int i,int e)
{
int j;
if(i1 || ip-length+1)
{printf("错误范围\n");}
if(p-length=MaxSize)
{printf("存储空间已满\n");}
for(j=p-length;j=i;j--)
p-data[j]=p-data[j-1];
p-data[i-1]=e;
p-length++;
}
static void ListDelete(SqList *p,int i)
{
if(i1 || ip-length)
{printf("删除范围出错\n");return;}
while(ip-length)
{
p-data[i-1]=p-data[i];i++;
}
p-length--;
}
static int LocateElem(SqList L,int e)
{
int i;
for(i=0;iL.length;i++)
if(L.data[i]==e)
return i+1;
return 0;
}
static void Reverse(SqList *p,int left,int right)
{
int temp;
if(leftright || left1 || rightp-length)
{printf("错误的输入\n");return;}
for(left--,right--;leftright;left++,right--)
{
temp=p-data[left];
p-data[left]=p-data[right];
p-data[right]=temp;
}
}
static int Binsearch(SqList L,int e)
{
int mid,low=0,high=L.length-1;
while((low+1)!=high)
{
mid=(low+high)/2;
if(L.data[mid]==e) return mid+1;
if(eL.data[mid]) high=mid;
if(eL.data[mid]) low=mid;
}
return 0;
}
ListInsert 和 ListDelete 为你所要的函数
数据结构 c语言版 ——顺序表的查找、插入与删除
#includestdio.h
#includestdlib.h
#define N 10 //顺序表的最大容量
int length=0; //顺序表的当前元素个数
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define LIST_INIT_SIZE 100//线性表存储的空间初始化分配量
#define LISTINCREAMENT 10 //线性表存储空间的分配增量
typedef struct LNode//线性单链表存储结构
{
int data;
struct LNode *next;
}LNode,*LinkList;
int CreatList_L(LinkListL)//创建一个线性链表
{
L=(LinkList)malloc(sizeof(LNode));//分配一个空间给链表,作为头结点
if(!L) exit(OVERFLOW);
L-next=NULL;
return OK;
}
int DestroyList_L(LinkList L)//销毁链表
{
if(L) free(L);
return OK;
}
int ListInsert_L(LinkListL,int i,int e)//再练表的第i个元素前插入一个元素e
{
LinkList p=L;//p指针定位于i-1
LNode *s;
int j=0;
while(pji-1) {p=p-next;j++;}//定位
if(!p||ji-1) return ERROR;//如果i1或大于链表元素个数+1
s=(LNode*)malloc(sizeof(LNode));
if(!s) exit(OVERFLOW);
s-data=e; //完成插入操作
s-next=p-next;
p-next=s;
return OK;
}
int ListDelet_L(LinkListL,int i,inte)//删除链表L中的第i个元素,并返回给e;
{
LinkList p=L;
LNode* q;
int j=0;
while(!pji-1) {p=p-next;j++;}//p指针定位于i-1;
if(!p-next||ji-1) return ERROR;
e=p-next-data; //完成删除操作
q=p-next;
p-next=p-next-next;
free(q);
return OK;
}
int ListTraverse_L(LinkList L,int n)//链表的遍历
{
int i=0;
if(!L)return ERROR;
L=L-next;
while(L)
{
if(L-data==n)return i;
L=L-next;
i++;
}
return FALSE;
}
int InverseSingleList_L(LinkList L)
{
if(!L-next||!L-next-next)//如果链表少于2个Node那么链表不需要改变顺序
return OK;
LNode *p,*q;
p=L-next; //第一次因为p是最后一个连接所以把p-next设为空
q=p-next;
p-next=NULL;
p=q;
while(p)
{
q=p-next; //用q去保留p后面一个Node;
p-next=L-next;
L-next=p;
p=q;
}
return OK;
}
int main()
{
int List[N];
LinkList L;
int ch,exit='N';
do
{
system("CLS");
printf("\t\t********************************************\n");
printf("\t\t* 1.创建一个顺序表 .........(1) *\n");
printf("\t\t* 2.在顺序表中查找元表.........(2) *\n");
printf("\t\t* 3.在顺序表中插入元表.........(3) *\n");
printf("\t\t* 4.在顺序表中删除元表.........(4) *\n");
printf("\t\t* 5.退出 .........(5) *\n");
printf("\t\t********************************************\n");
printf("\n请选择操作代码:");
ch=getchar();
switch(ch)
{
case '1':
printf("\n请输入十个元素");
CreatList_L(L);
for(length=0;lengthN;length++)
{
scanf("%d",List[length]);
getchar();
ListInsert_L(L,length+1,List[length]);
}
printf("\n创建成功!");
getchar();
break;
case '2':
scanf("%d",List[0]);
if(ListTraverse_L(L,List[0]))printf("该元素存在该年表的第%d个位置",ListTraverse_L(L,List[0]));
else printf("不存在该元素");
getchar();
break;
case '3':
scanf("%d%d",length,List[0]);
ListInsert_L(L,length,List[0]);
system("pause");
break;
case '4':
scanf("%d",length);
ListDelet_L(L,length,List[0]);
system("pause");
break;
case '5':
printf("\n您是否真的要退出程序(Y/N):");
getchar();
exit=getchar();
break;
default:
getchar();
printf("\n无效输入,请重新选择...:");
getchar();
break;
}
}while(exit!='y'exit!='Y');
}
本文题目:c语言中删除顺序表的函数 c语言排序后删除相同的数
本文路径:http://myzitong.com/article/dooccjc.html