1. 數據結構C語言單鏈表的創建,插入刪除和合並程序代碼
你看這個應該滿足要求吧。我把三種循環方式都用上了:
#include<stdio.h>
#include<math.h>
int isprime(int n)
{
int i,t;
if(n==2)
return 1;
if(n%2==0 || n<2)
return 0;
for(i=3,t=(int)sqrt(n);i<=t;i+=2)
{
if(n%i==0)
return 0;
}
return 1;
}
void main()
{
int i,a,n;
i=0;
do
{
printf("Input an integer (>=1):");
scanf("%d",&a);
if(a>=1)
break;
}while(++i<3);
if(i==3) exit(0);
printf("prime submultiples:\n");
i=1;
n=0;
while(i<=a)
{
if(a%i==0)
if(isprime(i))
{
printf("%d ",i);
n++;
if(n%10==0)
printf("\n");
}
i++;
}
2. C語言鏈式表最少寫創建,查詢,插入,刪除,輸出這幾個功能 ;完整代碼
比你要求的要多很多
看注釋
#include"stdio.h"
#include<stdlib.h>
#include"string.h"
typedefintelemType;
/************************************************************************/
/*以下是關於線性表鏈接存儲(單鏈表)操作的18種演算法*/
/*1.初始化線性表,即置單鏈表的表頭指針為空*/
/*2.創建線性表,此函數輸入負數終止讀取數據*/
/*3.列印鏈表,鏈表的遍歷*/
/*4.清除線性表L中的所有元素,即釋放單鏈表L中所有的結點,使之成為一個空表*/
/*5.返回單鏈表的長度*/
/*6.檢查單鏈表是否為空,若為空則返回1,否則返回0*/
/*7.返回單鏈表中第pos個結點中的元素,若pos超出范圍,則停止程序運行*/
/*8.從單鏈表中查找具有給定值x的第一個元素,若查找成功則返回該結點data域的存儲地址,否則返回NULL*/
/*9.把單鏈表中第pos個結點的值修改為x的值,若修改成功返回1,否則返回0*/
/*10.向單鏈表的表頭插入一個元素*/
/*11.向單鏈表的末尾添加一個元素*/
/*12.向單鏈表中第pos個結點位置插入元素為x的結點,若插入成功返回1,否則返回0*/
/*13.向有序單鏈表中插入元素x結點,使得插入後仍然有序*/
/*14.從單鏈表中刪除表頭結點,並把該結點的值返回,若刪除失敗則停止程序運行*/
/*15.從單鏈表中刪除表尾結點並返回它的值,若刪除失敗則停止程序運行*/
/*16.從單鏈表中刪除第pos個結點並返回它的值,若刪除失敗則停止程序運行*/
/*17.從單鏈表中刪除值為x的第一個結點,若刪除成功則返回1,否則返回0*/
/*18.交換2個元素的位置*/
/*19.將線性表進行快速排序*/
/************************************************************************/
typedefstructNode{/*定義單鏈表結點類型*/
elemTypeelement;
structNode*next;
}Node;
/*1.初始化線性表,即置單鏈表的表頭指針為空*/
voidinitList(Node**pNode)
{
*pNode=NULL;
printf("initList函數執行,初始化成功 ");
}
/*2.創建線性表,此函數輸入負數終止讀取數據*/
Node*creatList(Node*pHead)
{
Node*p1;
Node*p2;
p1=p2=(Node*)malloc(sizeof(Node));//申請新節點
if(p1==NULL||p2==NULL)
{
printf("內存分配失敗 ");
exit(0);
}
memset(p1,0,sizeof(Node));
scanf("%d",&p1->element);//輸入新節點
p1->next=NULL;//新節點的指針置為空
while(p1->element>0)//輸入的值大於0則繼續,直到輸入的值為負
{
if(pHead==NULL)//空表,接入表頭
{
pHead=p1;
}
else
{
p2->next=p1;//非空表,接入表尾
}
p2=p1;
p1=(Node*)malloc(sizeof(Node));//再重申請一個節點
if(p1==NULL||p2==NULL)
{
printf("內存分配失敗 ");
exit(0);
}
memset(p1,0,sizeof(Node));
scanf("%d",&p1->element);
p1->next=NULL;
}
printf("creatList函數執行,鏈表創建成功 ");
returnpHead;//返回鏈表的頭指針
}
/*3.列印鏈表,鏈表的遍歷*/
voidprintList(Node*pHead)
{
if(NULL==pHead)//鏈表為空
{
printf("PrintList函數執行,鏈表為空 ");
}
else
{
while(NULL!=pHead)
{
printf("%d",pHead->element);
pHead=pHead->next;
}
printf(" ");
}
}
/*4.清除線性表L中的所有元素,即釋放單鏈表L中所有的結點,使之成為一個空表*/
voidclearList(Node*pHead)
{
Node*pNext;//定義一個與pHead相鄰節點
if(pHead==NULL)
{
printf("clearList函數執行,鏈表為空 ");
return;
}
while(pHead->next!=NULL)
{
pNext=pHead->next;//保存下一結點的指針
free(pHead);
pHead=pNext;//表頭下移
}
printf("clearList函數執行,鏈表已經清除 ");
}
/*5.返回單鏈表的長度*/
intsizeList(Node*pHead)
{
intsize=0;
while(pHead!=NULL)
{
size++;//遍歷鏈表size大小比鏈表的實際長度小1
pHead=pHead->next;
}
printf("sizeList函數執行,鏈表長度%d ",size);
returnsize;//鏈表的實際長度
}
/*6.檢查單鏈表是否為空,若為空則返回1,否則返回0*/
intisEmptyList(Node*pHead)
{
if(pHead==NULL)
{
printf("isEmptyList函數執行,鏈表為空 ");
return1;
}
printf("isEmptyList函數執行,鏈表非空 ");
return0;
}
/*7.返回單鏈表中第pos個結點中的元素,若pos超出范圍,則停止程序運行*/
elemTypegetElement(Node*pHead,intpos)
{
inti=0;
if(pos<1)
{
printf("getElement函數執行,pos值非法 ");
return0;
}
if(pHead==NULL)
{
printf("getElement函數執行,鏈表為空 ");
return0;
//exit(1);
}
while(pHead!=NULL)
{
++i;
if(i==pos)
{
break;
}
pHead=pHead->next;//移到下一結點
}
if(i<pos)//鏈表長度不足則退出
{
printf("getElement函數執行,pos值超出鏈表長度 ");
return0;
}
returnpHead->element;
}
/*8.從單鏈表中查找具有給定值x的第一個元素,若查找成功則返回該結點data域的存儲地址,否則返回NULL*/
elemType*getElemAddr(Node*pHead,elemTypex)
{
if(NULL==pHead)
{
printf("getElemAddr函數執行,鏈表為空 ");
returnNULL;
}
if(x<0)
{
printf("getElemAddr函數執行,給定值X不合法 ");
returnNULL;
}
while((pHead->element!=x)&&(NULL!=pHead->next))//判斷是否到鏈表末尾,以及是否存在所要找的元素
{
pHead=pHead->next;
}
if((pHead->element!=x)&&(pHead!=NULL))
{
printf("getElemAddr函數執行,在鏈表中未找到x值 ");
returnNULL;
}
if(pHead->element==x)
{
printf("getElemAddr函數執行,元素%d的地址為0x%x ",x,&(pHead->element));
}
return&(pHead->element);//返回元素的地址
}
/*9.把單鏈表中第pos個結點的值修改為x的值,若修改成功返回1,否則返回0*/
intmodifyElem(Node*pNode,intpos,elemTypex)
{
Node*pHead;
pHead=pNode;
inti=0;
if(NULL==pHead)
{
printf("modifyElem函數執行,鏈表為空 ");
}
if(pos<1)
{
printf("modifyElem函數執行,pos值非法 ");
return0;
}
while(pHead!=NULL)
{
++i;
if(i==pos)
{
break;
}
pHead=pHead->next;//移到下一結點
}
if(i<pos)//鏈表長度不足則退出
{
printf("modifyElem函數執行,pos值超出鏈表長度 ");
return0;
}
pNode=pHead;
pNode->element=x;
printf("modifyElem函數執行 ");
return1;
}
/*10.向單鏈表的表頭插入一個元素*/
intinsertHeadList(Node**pNode,elemTypeinsertElem)
{
Node*pInsert;
pInsert=(Node*)malloc(sizeof(Node));
memset(pInsert,0,sizeof(Node));
pInsert->element=insertElem;
pInsert->next=*pNode;
*pNode=pInsert;
printf("insertHeadList函數執行,向表頭插入元素成功 ");
return1;
}
/*11.向單鏈表的末尾添加一個元素*/
intinsertLastList(Node**pNode,elemTypeinsertElem)
{
Node*pInsert;
Node*pHead;
Node*pTmp;//定義一個臨時鏈表用來存放第一個節點
pHead=*pNode;
pTmp=pHead;
pInsert=(Node*)malloc(sizeof(Node));//申請一個新節點
memset(pInsert,0,sizeof(Node));
pInsert->element=insertElem;
while(pHead->next!=NULL)
{
pHead=pHead->next;
}
pHead->next=pInsert;//將鏈表末尾節點的下一結點指向新添加的節點
*pNode=pTmp;
printf("insertLastList函數執行,向表尾插入元素成功 ");
return1;
}
/*12.向單鏈表中第pos個結點位置插入元素為x的結點,若插入成功返回1,否則返回0*/
/*13.向有序單鏈表中插入元素x結點,使得插入後仍然有序*/
/*14.從單鏈表中刪除表頭結點,並把該結點的值返回,若刪除失敗則停止程序運行*/
/*15.從單鏈表中刪除表尾結點並返回它的值,若刪除失敗則停止程序運行*/
/*16.從單鏈表中刪除第pos個結點並返回它的值,若刪除失敗則停止程序運行*/
/*17.從單鏈表中刪除值為x的第一個結點,若刪除成功則返回1,否則返回0*/
/*18.交換2個元素的位置*/
/*19.將線性表進行快速排序*/
/******************************************************************/
intmain()
{
Node*pList=NULL;
intlength=0;
elemTypeposElem;
initList(&pList);//鏈表初始化
printList(pList);//遍歷鏈表,列印鏈表
pList=creatList(pList);//創建鏈表
printList(pList);
sizeList(pList);//鏈表的長度
printList(pList);
isEmptyList(pList);//判斷鏈表是否為空鏈表
posElem=getElement(pList,3);//獲取第三個元素,如果元素不足3個,則返回0
printf("getElement函數執行,位置3中的元素為%d ",posElem);
printList(pList);
getElemAddr(pList,5);//獲得元素5的地址
modifyElem(pList,4,1);//將鏈表中位置4上的元素修改為1
printList(pList);
insertHeadList(&pList,5);//表頭插入元素12
printList(pList);
insertLastList(&pList,10);//表尾插入元素10
printList(pList);
clearList(pList);//清空鏈表
system("pause");
}
3. 使用C語言編寫程序,實現順序表的基本運算——插入和刪除。
typedef struct
{
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;i<n;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(i<1||i>L->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;
}
4. 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;
}