#includestdio.h

創(chuàng)新互聯(lián)公司是一家專業(yè)從事成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)頁設(shè)計(jì)的品牌網(wǎng)絡(luò)公司。如今是成都地區(qū)具影響力的網(wǎng)站設(shè)計(jì)公司,作為專業(yè)的成都網(wǎng)站建設(shè)公司,創(chuàng)新互聯(lián)公司依托強(qiáng)大的技術(shù)實(shí)力、以及多年的網(wǎng)站運(yùn)營經(jīng)驗(yàn),為您提供專業(yè)的成都網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)及網(wǎng)站設(shè)計(jì)開發(fā)服務(wù)!
#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');
}
到底是問鏈表還是數(shù)列呀?
可以這樣寫,傳入的是頭指針
void DeleteList(LIST* head)
{
LIST* tmp;
tmp = head;
while(tmp!=NULL)
{
head = tmp-next;
free(tmp);
tmp = head;
}
}
遞歸算菲數(shù)列的
long fi(int n)
{
if (n==1||n==2) return 1;
return fi(n-1)+fi(n-2);
}
其實(shí)用遞歸算菲波拉契數(shù)列很慢的,很快就棧溢出了。
//線性表函數(shù)操作
#include stdio.h
#include string.h
#define MaxSize 30
#define Error 0
#define True 1
typedef char ElemType;
typedef struct
{
ElemType elem[MaxSize];
int length;
}SqList; /*順序表類型定義*/
void InitList(SqList * L) /*初始化順序表L*/
{
L = (SqList *)malloc(sizeof(SqList));
L - length = 0;
}
void DestroyList( SqList *L ) /*釋放順序表L*/
{
free(L);
}
int ListEmpty( SqList *L ) /*判斷順序表L是否為空表*/
{
return( L - length == 0);
}
int ListLength( SqList *L ) /*返回順序表L的元素個(gè)數(shù)*/
{
return( L - length);
}
void DispList( SqList *L ) /*輸出順序表L*/
{
int i;
if( ListEmpty(L))
return;
for( i = 0; i L - length; i++ )
printf("%c", L - elem[i]);
printf("\n");
}
int GetElem( SqList *L, int i, ElemType e) /*獲取順序表中的第i個(gè)元素*/
{
if( i 1 || i L - elem[i])
return Error;
e = L - elem[i - 1];
return True;
}
int LocateElem( SqList *L, ElemType e) /*在順序表中查找元素e*/
{
int i = 0;
while( i L - length L - elem[i] != e)
i++;
if(i = L - length)
return Error;
else
return i+1;
}
int ListInsert( SqList * L, int i, ElemType e) /*在順序表L中第i個(gè)位置插入元素e*/
{
int j;
if( i 1 || i L - length + 1)
return 0;
i--; /*將順序表位序轉(zhuǎn)化為elem下標(biāo)*/
for( j = L - length; j i; j--) /*將elem[i]及后面元素后移一個(gè)位置*/
L - elem[j] = L - elem[j - 1];
L - elem[i] = e;
L - length++; /*順序表長度增1*/
return True;
}
int ListDelete( SqList * L, int i, ElemType e) /*順序表L中刪除第i個(gè)元素*/
{
int j;
if( i 1 || i L - length)
return Error;
i--; /*將順序表位序轉(zhuǎn)化為elem下標(biāo)*/
e = L - elem[i];
for(j = i; j L - length - i; j++)
L - elem[j] = L - elem[j + 1];
L - length--; /*順序表長度減1*/
return True;
}
void main()
{
SqList *L;
ElemType e;
printf("(1)初始化順序表L\n");
InitList(L);
printf("(2)依次采用尾插法插入a,b,c,d,e元素\n");
ListInsert(L, 1, 'a');
ListInsert(L, 2, 'b');
ListInsert(L, 3, 'c');
ListInsert(L, 4, 'd');
ListInsert(L, 5, 'e');
printf("(3)輸出順序表L:");
DispList(L);
printf("(4)順序表L長度 = %d\n", ListLength(L));
printf("(5)順序表L為%s\n", (ListEmpty(L) ?"空" :"非空"));
GetElem(L, 3, e);
printf("(6)順序表L的第3個(gè)元素 = %c\n", e);
printf("(7)元素a的位置 = %d\n", LocateElem(L,'a'));
printf("(8)在第4個(gè)元素位置上插入f元素\n");
ListInsert(L, 4, 'f');
printf("(9)輸出新的順序表L:");
DispList(L);
printf("(10)刪除L的第3個(gè)元素\n");
ListDelete(L, 3, e);
printf("(11)輸出新的順序表L:");
DispList(L);
printf("(12)釋放順序表L\n");
DestroyList(L);
}
#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);
}
//求順序表長度
status listlength(sqlist l)
{
cout"順序表的長度為:"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.順序表的長度 *"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"順序表的長度為:";
listlength(l);
break;
case 8: displaylist(l);
break;
default: break;
}
}while(a!=0);
return 1;
}
這兩個(gè)函數(shù)一個(gè)是銷毀棧DestroyStack,一個(gè)是清空棧ClearStack
銷毀是把整個(gè)棧都釋放掉,清空只是把棧里元素清除。
因?yàn)槟愕臈T厥莍nt型基本變量,所以棧元素內(nèi)容是直接存放在棧空間的,并沒有另外申請(qǐng)內(nèi)存保存棧元素,所以在從棧里移除棧元素時(shí),不需要調(diào)用free函數(shù)。
實(shí)際上你的DestroyStack可以很直接的如下:
int DestroyStack(stack s)
{
free(s.base); //釋放棧空間,這里假設(shè)s.base是個(gè)指針而不是數(shù)組
//如果s結(jié)構(gòu)也是動(dòng)態(tài)申請(qǐng)的,也需要執(zhí)行free(s);
}
至于ClearStack,書上寫的是沒問題的,清空棧,不是要釋放棧空間,而是把棧里的元素都清除,最直接的做法就是把棧頂指針指向棧底指針,棧頂和棧底指針相同時(shí),就表示棧內(nèi)無元素,棧空間還是保留,下次可以繼續(xù)把棧元素壓棧和彈棧。
void?destroyLink(Node?*head)
{
if(!head)
return;
Node*?pTemp=head-pNext;
delete?head;
destroyLink(pTemp);
}
名稱欄目:c語言順序表銷毀函數(shù),c語言退出函數(shù)的語句
轉(zhuǎn)載注明:http://chinadenli.net/article36/dsgejsg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、手機(jī)網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、小程序開發(fā)、網(wǎng)站改版、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)