❶ 用c語言代碼寫順序線性表中刪除操作
status deletedatalist(sqlist *l)
{
int i=0,n,j;
cout<<"請輸入你要刪除的數據:";
cin>>n;
for(i=0;i<l->length;i++)
{
if(n==l->elem[i])
{
for(j=i;j<l->length;j++)
{
l->elem[j]=l->elem[j+1];
}
}
}
l->length--;
return 1;
}
❷ c語言線性表中元素的刪除
a[0]不存放元素,那我用來放表的大小了?
#include
<stdio.h>
#define
N
10
int
vector[N];
void
initialize_vector()
{
vector[0]
=
0;
}
void
print_vector()
{
int
i,
size;
for
(i
=
1,
size
=
vector[0];
i
<=
size;
++i)
printf("%d
",
vector[i]);
printf("\n");
}
void
add(int
value)
{
if
(vector[0]
<
N
-
1)
{
vector[++vector[0]]
=
value;
}
}
void
erase(int
value)
{
int
c,
i,
j,
size
=
vector[0];
for
(i
=
0,
j
=
1,
c
=
0;
j
<=
size;
++j)
{
if
(vector[j]
==
value)
++c;
else
vector[++i]
=
vector[j];
}
vector[0]
-=
c;
}
int
main()
{
int
array[]
=
{
5,
4,
3,
3,
6,
7,
3,
9,
},
i;
for
(i
=
0;
i
<
sizeof(array)
/
sizeof(int);
++i)
add(array[i]);
printf("before
remove:
\n");
print_vector();
erase(3);
printf("after
remove:
\n");
print_vector();
return
0;
}
❸ C語言,線性表,插入,刪除,合並的實現。要源代碼,謝謝了。
~剛好上學期數據結構老師非要叫寫,還留了個~~
#include<stdio.h>
int c=0;//C是用來計算數組中數的個數的,當下面插入時就c++;刪除時就c--
void print(int a[100])//列印整個數組的函數
{
int b;
for(b=0;b<c;b++)
printf("%d ",a[b]);
printf("\n");
}
void cr(int a[])//插入函數
{
int i,j,m;
printf("請輸入要插入的位置:");
scanf("%d",&i);
//*************************************************************
//這些是用來判斷,所輸入的位置是否存在,
//如果不存在,則重新再輸入一次,當然這些可以不要,那在運行的時候
//就需要保證輸入的位置都是對的!
while(i<1||i>c+1)
{
printf("沒有這個位置,請重新輸入要插入的位置:");
scanf("%d",&i);
}
//**************************************************************
printf("請輸入要插入的數:");
scanf("%d",&j);
(c)++;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//用來把要插入位置以後的數,都往後移動一會,這樣騰出位置
for(m=c-1;m>=i;m--)
{
a[m]=a[m-1];
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
a[i-1]=j;//把要插入的數放入前面騰出的位置
print(a);
}
void del(int a[])//刪除函數
{
int i,m;
printf("請輸入要刪除數的位置:");
scanf("%d",&i);
(c)--;
for(m=i-1;m<c;m++)
a[m]=a[m+1];
print(a);
}
void find(int a[])//查找函數
{
int i,m;
char x;
printf("請輸入要查找的數:");
scanf("%d",&i);
for(m=0;m<c;m++)
{
if(a[m]==i)break;
}
if(m!=c)
{
printf("找到該數下標是%d.\n",m);
}
else
printf("查無此數.\n");
}
void hb(int a[])
{
int b[100]={0};
int d,i;
printf("請輸入要並入的數組數據數量(不能大於%d):",100-c);
scanf("%d",&d);
for(i=0;i<d;i++)
{
printf("請輸入第%d個數:",i+1);
scanf("%d",&b[i]);
}
printf("\n並入\n");
print(a);
printf("\n得到:\n");
for(i=0;i<d;i++)
{
a[c]=b[i];
c++;
}
print(a);
}
void main()
{
int a[100]={0};
int i,j,m,n;
printf("請輸入數據數量:");
scanf("%d",&c);
for(i=0;i<c;i++)
{
printf("請輸入第%d個數:",i+1);
scanf("%d",&a[i]);
}
print(a);
//__________________________________________________________
//次處採用選擇結構,既根據輸入m的值來判斷執行下面哪個語句
printf("插入請輸入1,刪除請輸入2,查找請輸入3,合並新數據4\n任意數結束:");
scanf("%d",&m);
switch (m)
{
case 1 :cr(a);break;
case 2 :del(a);break;
case 3 :find(a);break;
case 4 :hb(a);break;
default : break;
};
//______________________________________________________________
//如果不要兩橫線內的東西,則屏蔽掉後使用下面三句
//cr(a);
//del(a);
//find(a)
}
❹ 用c語言程序實現線性表的列印,插入,刪除等操作
作業還是自己做吧!
❺ 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時結束):";
cin>>x;
if(x==0) break;
l.elem[i]=x;
++l.length;
i++;
}
for(i=0;i<l.length-1;i++)
for(j=0;j<l.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(i<1||i>l.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(i<1||i>l.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;i<l.length-1;i++)
for(j=i+1;j<l.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;i<l.length;i++)
{
cout<<l.elem[i]<<" ";
}
cout<<endl;
return 1;
}
//查找數據
status locatelem(sqlist &l,int x)
{
elementype *p;
int i=1;
p=l.elem;
while(i<l.length&&(*p++)!=x)
i++;
cout<<i<<endl;
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.length<<endl;
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<<"輸入你的選擇:";
cin>>a;
switch(a)
{
case 1: listinit(l);
displaylist(l);
break;
case 2: cout<<"請輸入要插入數據的位置:";
cin>>i;
cout<<"請輸入要插入的數據元素:";
cin>>e;
listinsert(l,i,e);
displaylist(l);
break;
case 3: cout<<"請輸入要刪除的數據的位置:";
cin>>i;
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<<"輸入你要查找的數據:";
cin>>x;
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語言編程
在網上找個鏈表的例子程序肯定有的
❼ c語言線性表結點刪除
那是因為每次輸出在屏幕上的星號你並未清除,線性表裡的星號的確刪除了,保持5個星號。但屏幕的東西只有你用SYSTEM命令才會自己刪除的啊。 如果你想要走動的5星效果的話,應該將其他置為空格,每次從0開始輸出到最後一個五星,然後清屏。 清屏是System("cls");
❽ 怎樣用C語言摧毀線性表
你的意思是將線性表在內存中消失還是什麼?
內存中消失:將將全部結點用free函數將其釋放掉,這樣就在內存中消失了。
如果你不想訪問其他結點。那直接將頭指針free就可以了。至於其他數據已經找不到了。不過這樣做的是你的系統有時會崩潰。因為有內容在內存中沒有得到有效的釋放
❾ 怎樣用C語言寫線性表刪除函數(不要復制網上的)
#include<iostream>
#include<iomanip>
using namespace std;
class list
{
public:
int num,elem;
class list* next;
};
int e;
int del_ptr(list *head,int i)
{list *ptr=head;
if(i<0)
{
return 0;
}
int j;
for( j=1;j<i&&ptr->next!=NULL;j++)
{
ptr=ptr->next;
}
if(i!=j)
return 0;
else
{
list *top;
top=head;
if(ptr==head)//表頭刪除節點
{
head=head->next;
cout<<"已刪除編號為"<<ptr->num<<"元素!值為:"<<ptr->elem<<endl;
e= ptr->elem;
}
else
{
while(top->next!=ptr)
top=top->next;
if(ptr->next==NULL)//表尾
{
top->next=NULL;
cout<<"已刪除編號為"<<ptr->num<<"號元素!值為:"<<ptr->elem<<endl;
e= ptr->elem;
}
else//中間
{top->next=ptr->next;
cout<<"已刪除編號為"<<ptr->num<<"號元素!值為:"<<ptr->elem<<endl;
e= ptr->elem;
}
}
}
delete []ptr;
return 1;
}
int main()
{
list *newnode,*pre,*deldd;
deldd = new list;
if(!deldd)
{
cout<<"error"<<endl;
exit(1);
}
cout<<"輸入num";
cin>>deldd->num;
cout<<"輸入元素";
cin>>deldd->elem;
pre=deldd;
for(int i=1;i<5;i++)
{
newnode=new list;
if(!deldd)
{
cout<<"error"<<endl;
exit(1);
}
cout<<"輸入num";
cin>>newnode->num;
cout<<"輸入元素";
cin>>newnode->elem;
newnode->next=NULL;
pre->next=newnode;
pre=pre->next;
}
pre=deldd;
del_ptr(pre,2);
cout<<"返回的e的值為"<<e<<endl;
pre=deldd;
while(pre!=NULL)
{
cout<<pre->num<<"_____"<<pre->elem<<endl;
deldd=pre;
pre=pre->next;
delete deldd;
}
system("pause");
}
樓主功能已實現!!