c語(yǔ)言中刪除順序表的函數(shù) c語(yǔ)言排序后刪除相同的數(shù)

使用C語(yǔ)言編寫程序,實(shí)現(xiàn)順序表的基本運(yùn)算——插入和刪除。

typedef struct

成都創(chuàng)新互聯(lián)主要從事網(wǎng)站制作、成都網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)同心,十多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):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;

}

順序表的插入刪除及應(yīng)用(C語(yǔ)言版的)

我這有兩種方法,一種是按位置插入,另一種是按值。

(1)、

void insert1(elem *p,int i,int x)//在第i個(gè)位置插入x值

{int j;//j 是記錄a[M]的一個(gè)下標(biāo)

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個(gè)位置后面的數(shù)依次后移

p-a[i-1]=x;//在第i個(gè)位置插入x

p-len++;//長(zhǎng)度加1

}

}

(2)、

void insert2(elem *p,int x,int y)//在值x的位置插入y值

{int k=locate(p,x);//調(diào)用locate()函數(shù)(查找x的位置)

if(k==-1)//返回值為-1時(shí),說明沒有x值

printf("The list haven't number X ;%d !\n",x);

else//否則調(diào)用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個(gè)數(shù)

{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);

}

下面的是刪除重復(fù)的數(shù)。

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);

}

}

不足之外在所難免請(qǐng)諸位指正.

刪除順序表中的第i個(gè)元素,,給個(gè)完整的 C語(yǔ)言代碼吧~~~ 謝謝

#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++;//輸入順序表內(nèi)容

l-last=j-1;

deletelist(l,i,k);?

return 0;

}?

擴(kuò)展資料

順序表插入元素

向已有順序表中插入數(shù)據(jù)元素,根據(jù)插入位置的不同,可分為以下 3 種情況:

1、插入到順序表的表頭;

2、在表的中間位置插入元素;

3、尾隨順序表中已有元素,作為順序表中的最后一個(gè)元素;將要插入位置元素以及后續(xù)的元素整體向后移動(dòng)一個(gè)位置;將元素放到騰出來的位置上。

注意,動(dòng)態(tài)數(shù)組額外申請(qǐng)更多物理空間使用的是 realloc 函數(shù)。并且,在實(shí)現(xiàn)后續(xù)元素整體后移的過程,目標(biāo)位置其實(shí)是有數(shù)據(jù)的,還是 3,只是下一步新插入元素時(shí)會(huì)把舊元素直接覆蓋。

C語(yǔ)言線性順序表的插入和刪除

#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;

};

//建立鏈表,并排列數(shù)據(jù)

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"請(qǐng)輸入數(shù)據(jù)(輸入0時(shí)結(jié)束):";

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;

}

//插入數(shù)據(jù)

status listinsert(sqlist l,int i,elementype e)

{

elementype *p,*q,*newbase;

if(i1||il.length)

{

cout"i輸入錯(cuò)誤"endl;

return 0;

}

if(l.length=l.listsize)

{

newbase=(elementype*)realloc(l.elem,(l.listsize+INCREMENT)*sizeof(elementype));

if(!newbase)

{

cout"申請(qǐng)空間失敗"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;

}

//刪除數(shù)據(jù)

status listdelete(sqlist l,int i,elementype e)

{

elementype *p,*q;

if(i1||il.length)

{

cout"i輸入錯(cuò)誤"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;

}

//刪除重復(fù)的數(shù)據(jù)

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;

}

//輸出順序表數(shù)據(jù)

status displaylist(sqlist l)

{

int i;

cout"順序表的數(shù)據(jù)為:"endl;

for(i=0;il.length;i++)

{

coutl.elem[i]" ";

}

coutendl;

return 1;

}

//查找數(shù)據(jù)

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);

}

//求順序表長(zhǎng)度

status listlength(sqlist l)

{

cout"順序表的長(zhǎng)度為:"l.lengthendl;

return 1;

}

int main()

{

sqlist l;

int a,i,x;

elementype e;

cout"*************************************************"endl;

cout"* 順序表的表示和實(shí)現(xiàn) *"endl;

cout"*************************************************"endl;

do{

cout"*************************************************"endl;

cout"* 菜單 *"endl;

cout"* 1.建立順序表 *"endl;

cout"* 2.插入數(shù)據(jù) *"endl;

cout"* 3.刪除數(shù)據(jù) *"endl;

cout"* 4.刪除重復(fù)數(shù)據(jù) *"endl;

cout"* 5.清空數(shù)據(jù) *"endl;

cout"* 6.查找數(shù)據(jù) *"endl;

cout"* 7.順序表的長(zhǎng)度 *"endl;

cout"* 8.顯示順序表 *"endl;

cout"* 0.退出順序表 *"endl;

cout"*************************************************"endl;

cout"輸入你的選擇:";

cina;

switch(a)

{

case 1: listinit(l);

displaylist(l);

break;

case 2: cout"請(qǐng)輸入要插入數(shù)據(jù)的位置:";

cini;

cout"請(qǐng)輸入要插入的數(shù)據(jù)元素:";

cine;

listinsert(l,i,e);

displaylist(l);

break;

case 3: cout"請(qǐng)輸入要?jiǎng)h除的數(shù)據(jù)的位置:";

cini;

listdelete(l,i,e);

displaylist(l);

break;

case 4: cout"刪除前的數(shù)據(jù)為:";

displaylist(l);

listdeleterepeat(l);

cout"刪除后的數(shù)據(jù)為:";

displaylist(l);

break;

case 5: cout"清空前為:";

displaylist(l);

cout"清空后為:";

listclear(l);

displaylist(l);

break;

case 6: cout"輸入你要查找的數(shù)據(jù):";

cinx;

cout"你要查找的數(shù)據(jù)的位置為:";

locatelem(l,x);

displaylist(l);

break;

case 7: cout"順序表的長(zhǎng)度為:";

listlength(l);

break;

case 8: displaylist(l);

break;

default: break;

}

}while(a!=0);

return 1;

}

C語(yǔ)言中順序列表的插入刪除程序

#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);//用一個(gè)數(shù)組創(chuàng)建靜態(tài)順序表

static void Print(SqList L);//打印一個(gè)靜態(tài)順序表

static void ListInsert(SqList *p,int i,int e);//L的第i個(gè)位置插入e

static void ListDelete(SqList *p,int i);//刪除列表第i個(gè)數(shù)據(jù)

static int LocateElem(SqList L,int e);//查找第一個(gè)值等于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("錯(cuò)誤范圍\n");}

if(p-length=MaxSize)

{printf("存儲(chǔ)空間已滿\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("刪除范圍出錯(cuò)\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("錯(cuò)誤的輸入\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 為你所要的函數(shù)

數(shù)據(jù)結(jié)構(gòu) c語(yǔ)言版 ——順序表的查找、插入與刪除

#includestdio.h

#includestdlib.h

#define N 10 //順序表的最大容量

int length=0; //順序表的當(dāng)前元素個(gè)數(shù)

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define INFEASIBLE -1

#define OVERFLOW -2

#define LIST_INIT_SIZE 100//線性表存儲(chǔ)的空間初始化分配量

#define LISTINCREAMENT 10 //線性表存儲(chǔ)空間的分配增量

typedef struct LNode//線性單鏈表存儲(chǔ)結(jié)構(gòu)

{

int data;

struct LNode *next;

}LNode,*LinkList;

int CreatList_L(LinkListL)//創(chuàng)建一個(gè)線性鏈表

{

L=(LinkList)malloc(sizeof(LNode));//分配一個(gè)空間給鏈表,作為頭結(jié)點(diǎn)

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個(gè)元素前插入一個(gè)元素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或大于鏈表元素個(gè)數(shù)+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個(gè)元素,并返回給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個(gè)Node那么鏈表不需要改變順序

return OK;

LNode *p,*q;

p=L-next; //第一次因?yàn)閜是最后一個(gè)連接所以把p-next設(shè)為空

q=p-next;

p-next=NULL;

p=q;

while(p)

{

q=p-next; //用q去保留p后面一個(gè)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.創(chuàng)建一個(gè)順序表 .........(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請(qǐng)選擇操作代碼:");

ch=getchar();

switch(ch)

{

case '1':

printf("\n請(qǐng)輸入十個(gè)元素");

CreatList_L(L);

for(length=0;lengthN;length++)

{

scanf("%d",List[length]);

getchar();

ListInsert_L(L,length+1,List[length]);

}

printf("\n創(chuàng)建成功!");

getchar();

break;

case '2':

scanf("%d",List[0]);

if(ListTraverse_L(L,List[0]))printf("該元素存在該年表的第%d個(gè)位置",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無效輸入,請(qǐng)重新選擇...:");

getchar();

break;

}

}while(exit!='y'exit!='Y');

}

網(wǎng)站欄目:c語(yǔ)言中刪除順序表的函數(shù) c語(yǔ)言排序后刪除相同的數(shù)
標(biāo)題鏈接:http://muchs.cn/article22/dooccjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、、搜索引擎優(yōu)化、建站公司響應(yīng)式網(wǎng)站、小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司